4. load字符串到公私钥对象及-公钥加密私钥解密

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
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容