GoLang的RSA加密

            不足之处,欢迎指正。。。
package main

import (
   "encoding/pem"
   "crypto/x509"
   "crypto/rsa"
   "crypto/rand"
   "fmt"
   "encoding/base64"
)

//私钥
//openssl genrsa -out rsa_private_key.pem 1024
//公钥
//openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

var privatekey = []byte(`-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQCzvs5tNBYeD2cWXb53izlR6fPOPsS59p8sQLFTYC5z4XpL8FC8
SZp8yV9xEag250MUJKWDLW8r8l1hdfyjo1jiu/Kzlcz3KEZnS1PGdTok4UtCvBnI
AuooQveBoG3+ygS6hUD0cjuOQgpm4bczTWcWzcHEbID+cAgNp5ydZ0OihQIDAQAB
AoGAViIQL3pvQtZksu4XMJfxztQKdgHUKb0Jx530m5yShgs9nJg7SA8JTdT9vGQW
tMCbf1KUUcj65hdNMj/k4dGL7MTWQqXaDhO88tqPxfL5Tn/6xRhiFgrh7k7SBuxd
SDeHmEnX/ymBkKnSCY0krNsp0zmqdJbHj5lBRCt0965m5cECQQDlC0Shwf6A0/nu
DKjVVxzoL/aE1xk9f3FrNAFh1gLQ1vLJ87RQBzLWNoV4wZ04sNLk58FtvVWoMYdX
sx7lp2VVAkEAyOY/WvmiLQCHVtloYniJApOZE2RguFu2uxFCx0s3WdVgv9LUiXZw
xFsrRy1of6etz40/DdPBbJ9/hBjpJGBIcQJAJSk73GbGLQ63aSkCp4J3vTAy9gCU
JscrlrIcW0xGrq2BPMTeh3FzjQ/RffMj2BPQU7VKS8zBPgWzKMZ2B9qt9QJAblAP
pdLBPFi39/Z1HOz2vpVxTnalrVWe5uU5d9lTUV6bO3l2/uwsS4WMJA9I/B+Ejx0N
7HfEE/MYv9411qWP4QJAB7eC0jk1M49Ozbd2HfUbE727ZRRG0uBbtc9Qmeyt52eq
t3m/Q9jbBxqlPFxvXoMl8NjnD82vLoLeUcWtOnRfSg==
-----END RSA PRIVATE KEY-----`)
var publickey = []byte(`-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzvs5tNBYeD2cWXb53izlR6fPO
PsS59p8sQLFTYC5z4XpL8FC8SZp8yV9xEag250MUJKWDLW8r8l1hdfyjo1jiu/Kz
lcz3KEZnS1PGdTok4UtCvBnIAuooQveBoG3+ygS6hUD0cjuOQgpm4bczTWcWzcHE
bID+cAgNp5ydZ0OihQIDAQAB
-----END PUBLIC KEY-----`)

func main()  {
   var plaintext = []byte(`随便输入~6@#$%^&**()xiangm 试试`)
   // Encryption
   ciphertext,_ := MyEncryption(plaintext)
   // 这个数据还需要单独处理,才能输出(不然乱码)
   cipherdata :=  base64.StdEncoding.EncodeToString(ciphertext)
   fmt.Println(cipherdata)
   // Decryption
   data,_ := MyDecryption(ciphertext)
   fmt.Println(string(data))
}

func MyEncryption(plaintext []byte) ([]byte, error) {
   // 获取pem格式的公钥
   pemkey,_ := pem.Decode(publickey)
   // 解析pem公钥
   publickeyInterf,_ :=  x509.ParsePKIXPublicKey(pemkey.Bytes)
   // 断言,获取数据
   newpublickey := publickeyInterf.(*rsa.PublicKey)
   // 加密呢
   return rsa.EncryptPKCS1v15(rand.Reader,newpublickey,plaintext)
}

func MyDecryption(ciphertext []byte) ([]byte ,error) {
   // 获取pem格式的私钥
   pemkey,_ := pem.Decode(privatekey)
   // 解析PKCS1格式的私钥
   newprivatekey,_ := x509.ParsePKCS1PrivateKey(pemkey.Bytes)
   // 解密
   return rsa.DecryptPKCS1v15(rand.Reader,newprivatekey,ciphertext)
}

猜你喜欢

转载自blog.csdn.net/potatoandpotato/article/details/80650400
今日推荐