GO實現非對稱加密--RSA生成公鑰私鑰

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目錄下生成加密過後的公私鑰文件,如下
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章