在Golang中,你可以使用crypto/sm2包来实现SM2密钥分发。下面是一个简单的示例代码:
package main
import (
"crypto/rand"
"crypto/sm2"
"encoding/asn1"
"fmt"
)
func main() {
privateKey, err := sm2.GenerateKey(rand.Reader)
if err != nil {
fmt.Println("生成私钥失败:", err)
return
}
publicKey := &privateKey.PublicKey
message := []byte("Hello, SM2!")
ciphertext, err := publicKey.Encrypt(rand.Reader, message, nil)
if err != nil {
fmt.Println("加密失败:", err)
return
}
fmt.Printf("加密后的密文:%x\n", ciphertext)
plaintext, err := privateKey.Decrypt(nil, ciphertext, nil)
if err != nil {
fmt.Println("解密失败:", err)
return
}
fmt.Printf("解密后的明文:%s\n", string(plaintext))
signature, err := privateKey.Sign(rand.Reader, message, nil)
if err != nil {
fmt.Println("签名失败:", err)
return
}
asn1Data, _ := asn1.Marshal(signature)
fmt.Printf("数字签名:%x\n", asn1Data)
valid := publicKey.Verify(message, signature.R, signature.S)
if valid {
fmt.Println("数字签名验证通过")
} else {
fmt.Println("数字签名验证失败")
}
}
这段代码演示了生成SM2公私钥对,使用公钥进行加密和验证,以及使用私钥进行解密和签名操作。你可以根据实际需求进行修改和扩展。
内容由零声教学AI助手提供,问题来源于学员提问