package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"fmt"
"io/ioutil"
)
//用公钥进行加密
func rsPubKeyWEncrypt(src []byte,fileName string)[]byte {
//1.从公钥文件读取公钥,得到pem编码后的数据
bytes, err := ioutil.ReadFile(fileName) //获取公钥
if err != nil {
panic(err)
}
//2.对数据进行解码(decode)得到block
block, _ := pem.Decode(bytes) //进行解码,得到块
//3.得到block中的bytes,即der格式的字节流
derText := block.Bytes //拆解块,得到字节流
//4.解析字节流,得到公钥
publicKey,err := x509.ParsePKCS1PublicKey(derText)
if err != nil {
panic(err)
}
//5.使用公钥进行加密 //随机数生成器,公钥,明文进行加密
pkcs1v15, err := rsa.EncryptPKCS1v15(rand.Reader, publicKey, src)
if err != nil {
panic(err)
}
return pkcs1v15
}
//用私钥进行解密
func rsaPriKeyDecrypt(encrypt []byte,fileName string)[]byte {
//1.从私钥文件读取数据,得到pem编码后的数据
bytes, err := ioutil.ReadFile(fileName)
if err != nil {
panic(err)
}
//2.对数据进行解码(decode)得到block
block, _ := pem.Decode(bytes)
//3.得到block中的bytes,即der格式的字节流
derText := block.Bytes
//4.解析字节流,得到私钥钥
privateKey,err := x509.ParsePKCS1PrivateKey(derText)
if err != nil {
panic(err)
}
//5.使用私钥进行解密
pkcs1v15, err := rsa.DecryptPKCS1v15(rand.Reader, privateKey, encrypt)
if err != nil {
panic(err)
}
return pkcs1v15
}
func main() {
src :=[]byte("生死看淡,不服就干")
//进行加密
encrypt := rsPubKeyWEncrypt(src, "./rsaPublicKey.pem")
fmt.Printf("encrypt:%x\n",encrypt)
//进行解密
decrypt := rsaPriKeyDecrypt(encrypt, "./rsaPrivateKey.pem")
fmt.Printf("decrypt:%s\n",decrypt)
}
网友评论