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目录下生成加密过后的公私钥文件,如下
在这里插入图片描述

发布了19 篇原创文章 · 获赞 85 · 访问量 1322

猜你喜欢

转载自blog.csdn.net/qq_45828877/article/details/103951512