ras.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package utils
  2. import (
  3. "crypto/rand"
  4. "crypto/rsa"
  5. "crypto/x509"
  6. "encoding/base64"
  7. "encoding/pem"
  8. "os"
  9. log "github.com/sirupsen/logrus"
  10. )
  11. var (
  12. Private = []byte(`-----BEGIN private-----
  13. MIICXQIBAAKBgQC32pYyKWAWiI4CWZzxLgpad2pz1r6F9opDJaNQvFTQJiQivHlh
  14. sHQvyZ90ZDZbDxxAX/sqK4HMkDfBPBmol4UHRg5kAv9xkVEmyBtoLLljYRszxOje
  15. 693EyKDAeME8KNVgLLaCsMuiyy2EaZMBGAvxSTmnd+t1pMjHHp8n7DGunwIDAQAB
  16. AoGBAJf9oftYDzKxs0yoDsGnwTFm1V9sYVdYKJc4L1pYR3lIfskkrOgguvyinyrW
  17. icUfqchiUL5c91JIy375E3E3yeV/xoS4y+6Cf0dAiq/iiGoBqBtzbSpF+UA0o/pP
  18. 3yMu8WaueG2En8mpTN9kAcW9Cn279PtwMALfKmW1/NZdXJ2pAkEA8RL0gXGukWOZ
  19. auEMxp0OWvQm0R/lVz2XyfjSVQWfDT2vGMgDv6+2bUeT8DomJmx3oWQX2gq0uidb
  20. /Ir9rEvhWwJBAMM8r8GVva1gicTswBWi7tDHC8OGYY9a0MQ3IPCKDCC513Se0SJi
  21. rhSU1IL2PBBgnSS/atwJ+FwY6Cbynrs1Rw0CQQDBKJ3upcboyXQgtgfFkAvzhpMf
  22. lr3s4/YeJ5dn9mQVeOo2IfUW/tRdxS9dGUp+GQTVtNyDoXZjfavvsvJEvlvnAkAJ
  23. h6nQmj2S+/ZdnWzW4YgkusKRPbr/Y2BzY3mBJEvpQQkKUUJGGmkC6izhY6GU7xJc
  24. m9dcfEQaQsD6PbePzc71AkBEanolW+cy+XzlqxQPoR64h9oP+QaVS0mlD+u3YBWn
  25. M0OVEU2E6lZ2xR25WmM/VAplMzklBlfIhsfkvBDHFUDX
  26. -----END private-----`)
  27. Public = []byte(`-----BEGIN public-----
  28. MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC32pYyKWAWiI4CWZzxLgpad2pz
  29. 1r6F9opDJaNQvFTQJiQivHlhsHQvyZ90ZDZbDxxAX/sqK4HMkDfBPBmol4UHRg5k
  30. Av9xkVEmyBtoLLljYRszxOje693EyKDAeME8KNVgLLaCsMuiyy2EaZMBGAvxSTmn
  31. d+t1pMjHHp8n7DGunwIDAQAB
  32. -----END public-----`)
  33. )
  34. func initrsa() {
  35. //GenRsaKey(1024)
  36. // str := RsaEncrypt("你好")
  37. // log.Debug(str)
  38. // log.Debug(RsaDecrypt(str))
  39. }
  40. func RsaEncrypt(orig string) (encodestr string) {
  41. origData := []byte(orig)
  42. block, _ := pem.Decode(Public)
  43. if block == nil {
  44. log.Error("public key error")
  45. return
  46. }
  47. pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes)
  48. if err != nil {
  49. return
  50. }
  51. pub := pubInterface.(*rsa.PublicKey)
  52. res, err := rsa.EncryptPKCS1v15(rand.Reader, pub, origData)
  53. if err == nil {
  54. encodestr = base64.StdEncoding.EncodeToString(res)
  55. } else {
  56. log.Error("rsa en err", err.Error())
  57. }
  58. return
  59. }
  60. // 解密
  61. func RsaDecrypt(text string) (orig string) {
  62. ciphertext, err := base64.StdEncoding.DecodeString(text)
  63. if err != nil {
  64. log.Error("ras De error", err.Error())
  65. return
  66. }
  67. block, _ := pem.Decode(Private)
  68. if block == nil {
  69. log.Error("private key error!")
  70. return
  71. }
  72. priv, err := x509.ParsePKCS1PrivateKey(block.Bytes)
  73. if err != nil {
  74. return
  75. }
  76. res, err := rsa.DecryptPKCS1v15(rand.Reader, priv, ciphertext)
  77. if err == nil {
  78. orig = string(res)
  79. } else {
  80. log.Error("ras De error", err.Error())
  81. }
  82. return
  83. }
  84. func GenRsaKey(bits int) error {
  85. // 生成私钥文件
  86. privateKey, err := rsa.GenerateKey(rand.Reader, bits)
  87. if err != nil {
  88. return err
  89. }
  90. derStream := x509.MarshalPKCS1PrivateKey(privateKey)
  91. block := &pem.Block{
  92. Type: "private",
  93. Bytes: derStream,
  94. }
  95. file, err := os.Create("private.pem")
  96. if err != nil {
  97. return err
  98. }
  99. err = pem.Encode(file, block)
  100. if err != nil {
  101. return err
  102. }
  103. // 生成公钥文件
  104. publicKey := &privateKey.PublicKey
  105. derPkix, err := x509.MarshalPKIXPublicKey(publicKey)
  106. if err != nil {
  107. return err
  108. }
  109. block = &pem.Block{
  110. Type: "public",
  111. Bytes: derPkix,
  112. }
  113. file, err = os.Create("public.pem")
  114. if err != nil {
  115. return err
  116. }
  117. err = pem.Encode(file, block)
  118. if err != nil {
  119. return err
  120. }
  121. return nil
  122. }