千家信息网

GO怎么实现RSA的公钥加密私钥解密

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,这篇文章将为大家详细讲解有关GO怎么实现RSA的公钥加密私钥解密,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。package main import (
千家信息网最后更新 2024年11月23日GO怎么实现RSA的公钥加密私钥解密

这篇文章将为大家详细讲解有关GO怎么实现RSA的公钥加密私钥解密,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

package main import (        "crypto/rand"        "crypto/rsa"        "crypto/x509"        "encoding/base64"        "encoding/pem"        "errors"        "fmt") // 可通过openssl产生//openssl genrsa -out rsa_private_key.pem 1024var privateKey = []byte(`-----BEGIN RSA PRIVATE KEY-----MIICXQIBAAKBgQCrGh2sc5AKD1EQ8WdA1iWF4m7wXtO6WoS7Dtfd0Jm2ud+LKBQ+e7R6YIXnwfEKB/4Jm+jNtCi7/Zrx5gtEpUuVAyrEo5+qr5al5KibeJq3xyI/626IBsDMFX5o3WOoXceTF7+lgi6r+OuokqFJgpeh7YANXQ8Y8mn8ucw+Ly+LbQIDAQABAoGAGgoxbC3yP/WwyrlSk4WD1Gpvo9lqs7PO+4D4zWNP4YVMRitlWVUOVImYF3tmqbYprWCy/4tpn6KrECGImXvmkplXPxd4x3W+haZftx3VjTwh6fvT9yHp4swXxN+hLMItDdIOWS4U6wVJa77Dy7VfK303LZrPLqnxkf4oEywp5YECQQDZOz1WD7nOqOiyAlwDhfeLTmArN0f+gV6RLrxMp2XRqC2DN5nMq5O5BVVMK9LBgArNqYfxWYuMa3K2qliRDPPxAkEAyaNWq/fDvjpK9TgztqsHIiG+cUQpWI759zt5qHNA+QF4L43dtAVZzBR/uam1jnRuM6K0ZCSZo2ITiqapmk8bPQJAEd9d3IbOssIS4xJun5uWElAQeX3C3p2mOiuuMmBTcDx2AiXA8aXsMXzO18WDQYhXWzRniuPjJ1pvxbeeMdDvAQJBAMDhuZAJEzrOAlQurfFICyvQQZ+Rx0dKhbzFLOxBS96mVDSRLYn+MFbzKPcOa3lY0O4d7xd4l2td7zmLkePlVjUCQQCY8VuIfKc0+AWvPnktKXbx9bBdJZSDginZM5cu7pdxW0uB9KZoLqgbGLIvWrLyA6SBqo87Q1j1//wFgLP+A2Gn-----END RSA PRIVATE KEY-----`) //openssl//openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pemvar publicKey = []byte(`-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrGh2sc5AKD1EQ8WdA1iWF4m7wXtO6WoS7Dtfd0Jm2ud+LKBQ+e7R6YIXnwfEKB/4Jm+jNtCi7/Zrx5gtEpUuVAyrEo5+qr5al5KibeJq3xyI/626IBsDMFX5o3WOoXceTF7+lgi6r+OuokqFJgpeh7YANXQ8Y8mn8ucw+Ly+LbQIDAQAB-----END PUBLIC KEY-----`) // 加密func RsaEncrypt(origData []byte) ([]byte, error) {        //解密pem格式的公钥        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!")        }        //解析PKCS1格式的私钥        priv, err := x509.ParsePKCS1PrivateKey(block.Bytes)        if err != nil {                return nil, err        }        // 解密        return rsa.DecryptPKCS1v15(rand.Reader, priv, ciphertext)} func main() {        data, _ := RsaEncrypt([]byte("test dataΩ...2"))        fmt.Println(base64.StdEncoding.EncodeToString(data))        origData, _ := RsaDecrypt(data)        fmt.Println(string(origData))}

关于"GO怎么实现RSA的公钥加密私钥解密"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0