package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"fmt"
"os"
)
func GenerateRsaKeyPair(bits int) error {
//1.用GenerateKey函数的随机数生成器rando生成一对具有指定紫薇树的RSA秘钥
//私钥 生成秘钥 随机数生成器
privateKey, err := rsa.GenerateKey(rand.Reader, bits)
if err != nil {
return err
}
fmt.Printf("创建私钥中...\n")
//2.MarshalPKCSlprivatekeyj将rsa私钥序列化为DER编码
derTextPri := x509.MarshalPKCS1PrivateKey(privateKey)
//3.创建一个pem格式的block结构,将der编码的字节写入block
block :=pem.Block{ //创建一个格式结构
Type:"RSA Private Key",
Headers:nil,
Bytes:derTextPri,
}
//创建文件
file1, err := os.Create("rsaPrivateKey.pem")
if err != nil {
return err
}
defer file1.Close()
//4.使用pem的encode方法,将block写入磁盘文件中
// 编码
err = pem.Encode(file1, &block)
if err != nil {
return err
}
fmt.Printf("创建公钥中...\n")
//创建公钥
//1.通过私钥或得公钥
//公钥 以获得的私钥 公钥
publicKey := privateKey.PublicKey
//2.MarshalPKCS1PublicKey将rsa私钥许雷华问DER 编码
derTextPub := x509.MarshalPKCS1PublicKey(&publicKey)//将或得的公钥进行der编码
//3.创建一个pem格式的block结构,将der编码的字节流写入block
blockPub := pem.Block{
Type:"RSA Publick Key",
Headers:nil,
Bytes:derTextPub,
}
//创建文件
file2, err := os.Create("rsaPublicKey.pem")
if err != nil {
return err
}
defer file2.Close()
//4.使用pem的encode方法,将block写入磁盘文件中
err = pem.Encode(file2, &blockPub)//把生成好的块写入文件
if err != nil {
return err
}
return nil
}
func main() {
err := GenerateRsaKeyPair(2048)
if err != nil {
fmt.Printf("创建rsa秘钥对失败:%s\n",err)
}
fmt.Printf("创建rsa秘钥对成功!")
}
网友评论