Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Golang SM2加解密

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

作者:ZhongYuxuanG

本文主要介绍了Go语言实现Sm2加解密的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Golang实现国密Sm2加解密

安装

以下Dome自行添加err

实例:Sm2加密Dome

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

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加解密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文