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目錄下生成加密過後的公私鑰文件,如下