RAS在線生成:http://www.metools.info/code/c80.html
PKCS#8 類型
package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/base64"
"encoding/pem"
"errors"
"fmt"
)
var publicKey = []byte(`
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAM8UxlNEntcW3ISGpzCuUFSIu/vkzo36
gDO7ZXri6CpyLwlKZ3GT/6j/CgR6JRpZYS3HxB2ykO1kfi6DKldkvPcCAwEAAQ==
-----END PUBLIC KEY-----
`)
var privateKey = []byte(`
-----BEGIN PRIVATE KEY-----
MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAzxTGU0Se1xbchIan
MK5QVIi7++TOjfqAM7tleuLoKnIvCUpncZP/qP8KBHolGllhLcfEHbKQ7WR+LoMq
V2S89wIDAQABAkA3B8ZMiofLkP+5GC+F+EzQqiWKoxthD5jSJpKpPXOFE6ib1u4M
u9/5CzgpDi2R+75skCb+g+uWtrGVFm2dbfPBAiEA59EPqb8Iq6NIbKAeAC2g+LRw
j0dy0JvkW6P5ntjG1L0CIQDkrx9ugORG5a5dmAH4eN81MuxhMGZojiUdE4hyY/0F
wwIgZbchvEWKNGWM3bzT7RgYTYg+619aTZZZeKxWVxCfDbECIE995GIoIbHXUxYr
qbuyYHyAmBRsm5yKlLIXwR1qTmC7AiAqD7kc2TqtKuCL/4Uxr/9m+4Z/UmamPaUe
KhtsmatceQ==
-----END PRIVATE KEY-----
`)
func main() {
data, err := RsaEncrypt([]byte("Demo\n1611310969\n24212"))
if err != nil {
panic(err)
}
fmt.Println("加密數據:",base64.StdEncoding.EncodeToString(data))
origData, err := RsaDecrypt(data)
if err != nil {
panic(err)
}
fmt.Println("解密數據:",string(origData))
}
// 加密
func RsaEncrypt(origData []byte) ([]byte, error) {
block, _ := pem.Decode(publicKey)
if block == nil {
return nil, errors.New("public key error")
}
pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
return nil, err
}
pub := pubInterface.(*rsa.PublicKey)
return rsa.EncryptPKCS1v15(rand.Reader, pub, origData)
}
//解密
func RsaDecrypt(ciphertext []byte) ([]byte, error) {
block, _ := pem.Decode(privateKey)
if block == nil {
return nil, errors.New("private key error!")
}
parseResult, err := x509.ParsePKCS8PrivateKey(block.Bytes)
if err != nil {
return nil, errors.New("parse error!")
}
priv := parseResult.(*rsa.PrivateKey)
return rsa.DecryptPKCS1v15(rand.Reader, priv, ciphertext)
}