rsa加解密示例

Love The Way You Lie 2022-01-15 10:23 425阅读 0赞

为什么80%的码农都做不了架构师?>>> hot3.png

rsa加解密示例

  1. package main
  2. import (
  3. "crypto/rand"
  4. "crypto/rsa"
  5. "crypto/x509"
  6. "encoding/base64"
  7. "encoding/pem"
  8. "errors"
  9. "fmt"
  10. // "log"
  11. )
  12. var privateKey = []byte(`
  13. -----BEGIN RSA PRIVATE KEY-----
  14. MIICXAIBAAKBgQDXQrrwRLUhFsgWw4snjemCYryE9+RigE9v7q2/smQI7/4H9TZn
  15. rce/jm80VMxqB6c4t60HbmvuO8WspAp2oN/tZ7jx9qSfCWJoRqI7WbgLovOvwW+h
  16. Yo6orIFsc9lFG8bVRxUUCozijTmJiorKzPis/DUv/yPObav+d1bwKzsJ9QIDAQAB
  17. AoGAP2sdgCP96R25HVvG54Rbw1oriFEwLAT5YlTDQ7Le3fM2uEl6GdmM+9aO1LAW
  18. +TYAAim7BHF3wtxBRLefjYuf7NsLuLmujvXQoxdWm+lXuNQxxiiaTxtuj/3NhymR
  19. NROww9JsAATHSFi6CtLbni3Y+sKYA+NQextcpgSrN4Urv5ECQQDdC8qHZ1q2Rj9F
  20. F+/2g+50L8f0/HDnkMwkRZgj4YnfOn219qXv1tO58W7+da7eQJ+SQVuISi6mFGOZ
  21. 4FVQ28y/AkEA+Uy9SvkOK8Nrq926fxrXLXU5LQVAa7+bIpk2EWGpCJo+YtJYdKr1
  22. a+J+nMGQsjeX8m2DK6Q9IvmK1L/Ka5dySwJATmNlEjmT0Ln+q/j+LxTAVlGvfnCb
  23. dXNDAcXwWyEbbJ9of0QVuoUbloBJFVIUjlqqfApTdHSiMGFgpOwKNV+NLwJBAJVQ
  24. FP/Wc1pazR4+yvhdxwr+7qO8RX1DYVMzmGKIr4jrePoPKdOWoS9glJymgld7XJJi
  25. bPGyiLtt4mzSAha2ukkCQGV1X9i+aYN1YP45jGxiizVuRphIrfdAnbiKbYMEXm51
  26. NCtHHhLdIDnVu6tuP981eg87nEm8QQTvwjevSbWUmYY=
  27. -----END RSA PRIVATE KEY-----
  28. `)
  29. var publicKey = []byte(`
  30. -----BEGIN PUBLIC KEY-----
  31. MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXQrrwRLUhFsgWw4snjemCYryE
  32. 9+RigE9v7q2/smQI7/4H9TZnrce/jm80VMxqB6c4t60HbmvuO8WspAp2oN/tZ7jx
  33. 9qSfCWJoRqI7WbgLovOvwW+hYo6orIFsc9lFG8bVRxUUCozijTmJiorKzPis/DUv
  34. /yPObav+d1bwKzsJ9QIDAQAB
  35. -----END PUBLIC KEY-----
  36. `)
  37. func main() {
  38. var base64Str string
  39. // rsa加密
  40. // rsa加密成功后base64编码
  41. data, err := RsaEncrypt([]byte("筑巢新游|18500214038|廖杰"))
  42. if err == nil {
  43. base64Str = base64.StdEncoding.EncodeToString(data)
  44. fmt.Println("加密编码内容=>", base64Str)
  45. } else {
  46. fmt.Println("rsa加密结果", err)
  47. }
  48. // base64解码
  49. // 确码成功后rsa解密
  50. dataStr, bErr := base64.StdEncoding.DecodeString(base64Str)
  51. if bErr == nil {
  52. origData, rErr := RsaDecrypt(dataStr)
  53. if rErr == nil {
  54. fmt.Println("解码解密内容=>", string(origData))
  55. } else {
  56. fmt.Println("rsa解密结果:", rErr)
  57. }
  58. } else {
  59. fmt.Println("base64解码结果:", bErr)
  60. }
  61. }
  62. // 加密
  63. func RsaEncrypt(origData []byte) ([]byte, error) {
  64. block, _ := pem.Decode(publicKey)
  65. if block == nil {
  66. return nil, errors.New("public key error")
  67. }
  68. pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes)
  69. if err != nil {
  70. return nil, err
  71. }
  72. pub := pubInterface.(*rsa.PublicKey)
  73. return rsa.EncryptPKCS1v15(rand.Reader, pub, origData)
  74. }
  75. // 解密
  76. func RsaDecrypt(ciphertext []byte) ([]byte, error) {
  77. block, _ := pem.Decode(privateKey)
  78. if block == nil {
  79. return nil, errors.New("private key error!")
  80. }
  81. priv, err := x509.ParsePKCS1PrivateKey(block.Bytes)
  82. if err != nil {
  83. return nil, err
  84. }
  85. return rsa.DecryptPKCS1v15(rand.Reader, priv, ciphertext)
  86. }

转载于:https://my.oschina.net/golang/blog/387539

发表评论

表情:
评论列表 (有 0 条评论,425人围观)

还没有评论,来说两句吧...

相关阅读

    相关 RSA解密

    一:RSA加解密背景 RSA是目前使用最广泛的公钥密码体制之一。它是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦

    相关 RSA解密算法

    一、什么是RSA   RSA[公开密钥密码体制][Link 1]。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不