使用Golang实现Sm2加解密的代码详解

2024-04-18 0 684
目录
  • Golang实现国密Sm2加解密
    • 安装
    • 以下Dome自行添加err

Golang实现国密Sm2加解密

  • SM2 椭圆曲线公钥密码算法,SM2曲线实现性能和Golang SDK中的NIST P256椭圆曲线原生实现(非BoringCrypto)类似,也对amd64 和 arm64架构做了专门汇编优化实现,SM2包实现了SM2椭圆曲线公钥密码算法的数字签名算法、公钥加密算法、密钥交换算法,中的密钥对保护数据格式。
  • SM2 公私钥对的话,要么是自己产生,要么是别的系统产生后通过某种方式传输给您的。
  • SM2公钥加密算法支持的密文编码格式有两种
  • 简单串接方式: C1C3C2,曾经老的标准为 C1C2C3
  • ASN.1格式

安装

  • go get github.com/emmansun/gmsm

以下Dome自行添加err

实例:Sm2加密Dome

  • 如果您需要普通拼接编码输出,您可以调用sm2.Encrypt方法,其中EncrypterOpts类型参数可以传入nil,表示默认C1C3C2。

func Dome() {
//需要加密的参数
dataArray := []interface{}{\”object1\”, \”object2\”}
//序列化为JSON字符串
dataBytes, _ := json.Marshal(dataArray)

// 假设这是你的SM2公钥的十六进制字符串表示
publicKeyHex := \”\”

//DecodeString返回由十六进制字符串s表示的字节
keypoints, _ := hex.DecodeString(publicKeyHex)

//检查是否有效并返回PublicKey
testkey, err := sm2.NewPublicKey(keypoints)
if err != nil {
fmt.Printf(\”fail to new public key %v \\n\”, err)
}

//两种加密方式
//ciphertext, err := sm2.EncryptASN1(rand.Reader, testkey, dataBytes)
ciphertext, err := sm2.Encrypt(rand.Reader, testkey, dataBytes, nil)
if err != nil {
fmt.Fprintf(os.Stderr, \”Error from encryption: %s\\n\”, err)
return
}
fmt.Printf(\”Ciphertext: %x \\n\”, ciphertext)
}

实例:Sm2解密Dome

  • 这个SM2私钥的解密方法Decrypt,通常情况下,对crypto.DecrypterOpts类型参数,您只需传入nil,系统会自己检测输入密文是ASN.1还是普通拼接,但是,如果密文是老旧的C1||C2||C3拼接,请传入相应的crypto.DecrypterOpts类型参数,或者您可以先通过上面介绍的辅助函数转换一下。

func Dome() {
//私钥
privateKey := “

//解密
ciphertext, _ := hex.DecodeString(`加密出来字符串`)

privKey, _ := hex.DecodeString(privateKey)

testkey, err := sm2.NewPrivateKey(privKey)
if err != nil {
fmt.Printf(\”fail to new private key %v \\n\”, err)
}

plaintext, err := testkey.Decrypt(nil, ciphertext, nil)
if err != nil {
fmt.Fprintf(os.Stderr, \”Error1 from decryption: %s \\n\”, err)
return
}
fmt.Printf(\”Plaintext: %s \\n\”, string(plaintext))
}

总结:用已经生成的公钥、密钥和第三方库可以解决Golang语言的国密加解密问题。

到此这篇关于使用Golang实现Sm2加解密的代码详解的文章就介绍到这了,更多相关Golang SM2加解密内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!

您可能感兴趣的文章:

  • Go语言实现Sm2加解密的示例代码
  • springboot使用国产加密算法方式,sm2和sm3加解密demo
  • 在Golang中实现RSA算法的加解密操作详解
  • Golang基于Vault实现敏感数据加解密
  • golang使用aes库实现加解密操作

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 Golang 使用Golang实现Sm2加解密的代码详解 https://www.u-9.cn/jiaoben/golang/187018.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务