ZBLOG

golang的sm2实现密钥分发

在Golang中,你可以使用crypto/sm2包来实现SM2密钥分发。下面是一个简单的示例代码:

  1. package main
  2. import (
  3. "crypto/rand"
  4. "crypto/sm2"
  5. "encoding/asn1"
  6. "fmt"
  7. )
  8. func main() {
  9. privateKey, err := sm2.GenerateKey(rand.Reader)
  10. if err != nil {
  11. fmt.Println("生成私钥失败:", err)
  12. return
  13. }
  14. publicKey := &privateKey.PublicKey
  15. message := []byte("Hello, SM2!")
  16. ciphertext, err := publicKey.Encrypt(rand.Reader, message, nil)
  17. if err != nil {
  18. fmt.Println("加密失败:", err)
  19. return
  20. }
  21. fmt.Printf("加密后的密文:%x\n", ciphertext)
  22. plaintext, err := privateKey.Decrypt(nil, ciphertext, nil)
  23. if err != nil {
  24. fmt.Println("解密失败:", err)
  25. return
  26. }
  27. fmt.Printf("解密后的明文:%s\n", string(plaintext))
  28. signature, err := privateKey.Sign(rand.Reader, message, nil)
  29. if err != nil {
  30. fmt.Println("签名失败:", err)
  31. return
  32. }
  33. asn1Data, _ := asn1.Marshal(signature)
  34. fmt.Printf("数字签名:%x\n", asn1Data)
  35. valid := publicKey.Verify(message, signature.R, signature.S)
  36. if valid {
  37. fmt.Println("数字签名验证通过")
  38. } else {
  39. fmt.Println("数字签名验证失败")
  40. }
  41. }

这段代码演示了生成SM2公私钥对,使用公钥进行加密和验证,以及使用私钥进行解密和签名操作。你可以根据实际需求进行修改和扩展。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=12686

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?