非对称加密RSA-公钥的加解密

2019-01-17  本文已影响0人  够浪你大哥
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)
}
上一篇 下一篇

猜你喜欢

热点阅读