load字符串到公私钥对象及-公钥加密私钥解密
package main
import(
"encoding/base64"
"crypto/rand"
"crypto/sha256"
"crypto/rsa"
"crypto/x509"
"fmt"
"errors"
)
func main() {
pri := "MIICXAIBAAKBgQDO/DNlf8XfyvCh2CMFXhV9cwZkEDhSqul/NiOrGLTWpK+gqYU1iMO6BQ2alz8VfAhrzxvM/KVY++8R5p6ICHBloiYckIDlVnXi3gG10QVCrznxSoW8pB9Rxrx0ThWDUUJ5c/2I3XQvryQkg5usqbgauta8QJ/utUGSvGMjbHy0cQIDAQABAoGAcd6BD/epDiMBGqhjK9LEk80x2N6rfZ8U8a0BFmFzKxpSnFpmNDtXIgEhqMhIJjOkFltL+guLk1aWAQ0UbdXmrqUdNpEn0/3CEiLiFEjNjfbeBs0DMxg8KZ/VcJStj4E53orv6bCWCTG7fnDXFpBNQhg5Du+sH9ci33VkT06GlAECQQDXWiYPomWxfh66Ac6Q6x+n6i984n6hTU/WG2T2PvY3OhjX6MKglTvN2B5bks9oTyRdk4oEJfLVfTU0YIxSE9DhAkEA9g3CDojjJzfesIfInN0Yh/UvmPAjs2K669JZL+PQRDbCXPRvNgOJKWsmt3tBxiIRjG4Emn5GqVDO6NkMLw8FkQJAbuhmobapWPfzKyizEb+F1hytyEt9m+UNMN9657cVZuvsz4V4dutkmWase8zoNHhN6kOJ2QkSPxD0zbzLh5ndAQJBAMyC0vDRxjwqq+V+drgq7ODUYiN0Nbg8L7EivQ6ZA9ouyY4JfQYgGjla3mtS/3B3kK5wI1Nl8cV5bQEMppvWmIECQFvqSVxiFPYfntZSaRbZv7D5bs936W7O3YXZcV/QOGBqQHUEyWlOfvxHK2CZZ569RF1E87xh8d2W2JTPcGPnLW8="
pub := "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDO/DNlf8XfyvCh2CMFXhV9cwZkEDhSqul/NiOrGLTWpK+gqYU1iMO6BQ2alz8VfAhrzxvM/KVY++8R5p6ICHBloiYckIDlVnXi3gG10QVCrznxSoW8pB9Rxrx0ThWDUUJ5c/2I3XQvryQkg5usqbgauta8QJ/utUGSvGMjbHy0cQIDAQAB"
prik,_ := LoadPrivateKeyBase64(pri)
pubk,_ := LoadPublicKeyBase64(pub)
txt, _ := Encrypt("aaaaa", pubk)
txt2, _ := Decrypt(txt,prik)
fmt.Println(txt2,txt)
}
// Load private key from base64
func LoadPrivateKeyBase64(base64key string) (*rsa.PrivateKey, error) {
keybytes, err := base64.StdEncoding.DecodeString(base64key)
if err != nil {
return nil, fmt.Errorf("base64 decode failed, error=%s\n", err.Error())
}
privatekey, err := x509.ParsePKCS1PrivateKey(keybytes)
if err != nil {
return nil, errors.New("parse private key error!")
}
return privatekey, nil
}
func LoadPublicKeyBase64(base64key string) (*rsa.PublicKey, error) {
keybytes, err := base64.StdEncoding.DecodeString(base64key)
if err != nil {
return nil, fmt.Errorf("base64 decode failed, error=%s\n", err.Error())
}
pubkeyinterface, err := x509.ParsePKIXPublicKey(keybytes)
if err != nil {
return nil, err
}
publickey := pubkeyinterface.(*rsa.PublicKey)
return publickey, nil
}
// encrypt
func Encrypt(plaintext string, publickey *rsa.PublicKey) (string, error) {
label := []byte("")
sha256hash := sha256.New()
ciphertext, err := rsa.EncryptOAEP(sha256hash, rand.Reader, publickey, []byte(plaintext), label)
decodedtext := base64.StdEncoding.EncodeToString(ciphertext)
return decodedtext, err
}
// decrypt
func Decrypt(ciphertext string, privatekey *rsa.PrivateKey) (string, error) {
decodedtext, err := base64.StdEncoding.DecodeString(ciphertext)
if err != nil {
return "", fmt.Errorf("base64 decode failed, error=%s\n", err.Error())
}
sha256hash := sha256.New()
decryptedtext, err := rsa.DecryptOAEP(sha256hash, rand.Reader, privatekey, decodedtext, nil)
if err != nil {
return "", fmt.Errorf("RSA decrypt failed, error=%s\n", err.Error())
}
return string(decryptedtext), nil
}