Go实现RSA加解密
主要用到的库有crypto/rand、crypto/rsa、crypto/x509、encoding/pem。
分为三个文件:
- RSAGeneratekey.go //负责生成pem格式的私钥和公钥文件。
- RSAEncrypt.go //负责对明文进行加密,并将密文输出到文件。
- RSADecrypt.go //负责对密文进行解密,并将明文输出到文件。
RSAGeneratekey.go
package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"log"
"os"
"path/filepath"
"runtime"
)
func RSAGenerate(bits int) {
//get current path
_, currentpath, _, _ := runtime.Caller(0)
currentpath = filepath.Dir(currentpath)
//----------------------------------------------private key
// GenerateKey generates an RSA keypair of the given bit size using the
// random source random (for example, crypto/rand.Reader).
privateKey, err := rsa.GenerateKey(rand.Reader, bits)
if err != nil {
log.Fatal(err)
}
//serialize privatekey to ASN.1 der by x509.MarshalPKCS1PrivateKey
x509privatekey := x509.MarshalPKCS1PrivateKey(privateKey)
//encode x509 to pem and save to file
//1. create privatefile
privatekeyfile, err := os.Create(currentpath + "/privatekey.pem")
if err != nil {
log.Fatal(err)
}
defer privatekeyfile.Close()
//2. new a pem block struct object
privatekeyblock := pem.Block{
Type: "RSA Private Key",
Headers: nil,
Bytes: x509privatekey,
}
//3. save to file
pem.Encode(privatekeyfile, &privatekeyblock)
//----------------------------------------------public key
//get publi