ZBLOG

golang rsa 加密解密 签名验签 例子

以下是一个使用Go语言的RSA加密、解密、签名和验签的例子:

  1. package main
  2. import (
  3. "crypto/rand"
  4. "crypto/rsa"
  5. "crypto/sha256"
  6. "fmt"
  7. )
  8. func main() {
  9. // 生成一对RSA公私钥
  10. privKey, err := rsa.GenerateKey(rand.Reader, 2048)
  11. if err != nil {
  12. panic(err)
  13. }
  14. // 要加密的明文
  15. plainText := []byte("Hello RSA!")
  16. // 使用公钥加密明文
  17. cipherText, err := rsa.EncryptOAEP(sha256.New(), rand.Reader, &privKey.PublicKey, plainText, nil)
  18. if err != nil {
  19. panic(err)
  20. }
  21. fmt.Printf("Cipher text: %x\n", cipherText)
  22. // 使用私钥解密密文
  23. decryptedPlainText, err := rsa.DecryptOAEP(sha256.New(), rand.Reader, privKey, cipherText, nil)
  24. if err != nil {
  25. panic(err)
  26. }
  27. fmt.Printf("Decrypted plain text: %s\n", decryptedPlainText)
  28. // 签名消息
  29. hashed := sha256.Sum256([]byte("message to be signed"))
  30. signature, err := rsa.SignPKCS1v15(rand.Reader, privKey, crypto.SHA256, hashed[:])
  31. if err != nil {
  32. panic(err)
  33. }
  34. fmt.Printf("Signature: %x\n", signature)
  35. // 验证签名
  36. err = rsa.VerifyPKCS1v15(&privKey.PublicKey, crypto.SHA256, hashed[:], signature)
  37. if err != nil {
  38. panic(err)
  39. }
  40. }

在这个例子中,我们使用rsa.GenerateKey()函数生成一对RSA公私钥,并使用rsa.EncryptOAEP()函数使用公钥加密明文。然后,我们使用私钥解密密文并将其打印出来。

接下来,我们使用sha256.Sum256()函数计算消息的哈希值,并使用rsa.SignPKCS1v15()函数用私钥签名该哈希值。最后,我们使用rsa.VerifyPKCS1v15()函数验证签名是否正确。

注意,在生产环境中,请确保适当地保护您的RSA私钥,以防止任何人访问它。

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?