package crypto import ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/pem" "errors" ) func NewKeyRSA(bitSize int) (pubPEM []byte, keyPEM []byte, err error) { // Generate RSA key. key, err := rsa.GenerateKey(rand.Reader, bitSize) if err != nil { return nil, nil, err } // Extract public component. pub := key.Public() pubPEM = pem.EncodeToMemory( &pem.Block{ Type: "RSA PUBLIC KEY", Bytes: x509.MarshalPKCS1PublicKey(pub.(*rsa.PublicKey)), }, ) // Encode private key to PKCS#1 ASN.1 PEM. keyPEM = pem.EncodeToMemory( &pem.Block{ Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(key), }, ) return pubPEM, keyPEM, nil } // EncryptRSA rsa加密 func EncryptRSA(value, publicKey []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, value) } // DecryptRSA rsa解密 func DecryptRSA(ciphertext, privateKey []byte) ([]byte, error) { block, _ := pem.Decode(privateKey) if block == nil { return nil, errors.New("private key error") } priv, err := x509.ParsePKCS1PrivateKey(block.Bytes) if err != nil { return nil, err } return rsa.DecryptPKCS1v15(rand.Reader, priv, ciphertext) }