package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"flag"
"log"
"os"
)
func main() {
if err := GenerateRSAKey(); err != nil {
log.Fatal("密钥生成失败")
}
log.Println("密钥生成成功")
}
func GenerateRSAKey() error {
//1 RSA生成私钥文件步骤
//--1生成RSA私钥对
var bits int
flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")
privatekey,err :=rsa.GenerateKey(rand.Reader,bits)
if err != nil {
return err
}
//--2.将私钥对象转换为DER编码形式
derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)
//--3.创建私钥pem文件
file,err := os.Create("./files/private.pem")
if err != nil {
return err
}
//--4.对私钥信息进行编码,写入到私钥文件中
block := &pem.Block{
Type: "RSA PRIVATE KEY",
Bytes: derPribateKey,
}
err = pem.Encode(file,block)
if err != nil {
return err
}
//2 RSA生成公钥文件的核心步骤
//--1.生成公钥对象
publickey := &privatekey.PublicKey
//--2.将公钥对象转换为DER编码形式
derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)
if err != nil {
return err
}
//--3.创建公钥pem文件
file,err = os.Create("./files/public.pem")
if err != nil {
return err
}
//--4.对公钥信息进行编码,写入公钥文件中
block = &pem.Block{
Type: "PUBLIC KEY",
Bytes: derpublicKey,
}
err = pem.Encode(file,block)
if err != nil {
return err
}
return nil
}
执行后,自动在files目录下生成加密过后的公私钥文件,如下