ZBLOG

golang用github.com/tjfoc/gmsm/sm2库实现数字签名。代码如何写

下面是使用 github.com/tjfoc/gmsm/sm2 库在 Golang 中实现数字签名的示例代码:

  1. package main
  2. import (
  3. "crypto/rand"
  4. "crypto/x509"
  5. "encoding/pem"
  6. "fmt"
  7. "github.com/tjfoc/gmsm/sm2"
  8. )
  9. func main() {
  10. privateKey, err := generatePrivateKey()
  11. if err != nil {
  12. panic(err)
  13. }
  14. publicKey := privateKey.Public().(*sm2.PublicKey)
  15. message := []byte("Hello, world!")
  16. signature, err := sm2.Sign(privateKey, message)
  17. if err != nil {
  18. panic(err)
  19. }
  20. isValid := sm2.Verify(publicKey, message, signature)
  21. fmt.Println("Signature is valid:", isValid)
  22. }
  23. // 生成 SM2 私钥
  24. func generatePrivateKey() (*sm2.PrivateKey, error) {
  25. privateKey, err := sm2.GenerateKey(rand.Reader)
  26. if err != nil {
  27. return nil, err
  28. }
  29. privateKeyBytes, err := x509.MarshalECPrivateKey(privateKey)
  30. if err != nil {
  31. return nil, err
  32. }
  33. pemBlock := &pem.Block{
  34. Type: "PRIVATE KEY",
  35. Bytes: privateKeyBytes,
  36. }
  37. pemEncoded := pem.EncodeToMemory(pemBlock)
  38. fmt.Println("Generated Private Key:")
  39. fmt.Println(string(pemEncoded))
  40. return privateKey, nil
  41. }

上述代码中,我们首先使用 generatePrivateKey 函数生成一个随机的 SM2 私钥,并打印出私钥的 PEM 编码形式。接着,我们使用该私钥对消息进行签名,并验证签名的有效性。

注意:在运行上述代码之前,请确保你已经正确安装了 github.com/tjfoc/gmsm/sm2 包,并使用 go mod init 初始化了项目的模块。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?