生成RSA公私钥

package main

import (
	"crypto/rand"
	"crypto/rsa"
	"crypto/x509"
	"encoding/pem"
	"flag"
	"fmt"
	"os"
)

var outFilePath = flag.String("outpath", "./", "Generate rsa file save path")

func main() {
	flag.Parse()
	if err := genRsaKey(1, *outFilePath); err != nil {
		fmt.Println("密钥文件生成失败!")
	} else {
		fmt.Println("密钥文件生成成功!")
	}
}

func genRsaKey(bits int, filePath string) error {
	//检测生成证书
	if bits > 1024 {
		bits = 2048
	} else {
		bits = 1024
	}

	//查看目录是否存在
	_, err := os.Stat(filePath)
	if err != nil {
		os.Mkdir(filePath, 0777)
	}

	// 生成私钥文件
	privateKey, err := rsa.GenerateKey(rand.Reader, bits)
	if err != nil {
		return err
	}
	derStream := x509.MarshalPKCS1PrivateKey(privateKey)
	block := &pem.Block{
		Type:  "RSA PRIVATE KEY",
		Bytes: derStream,
	}
	file, err := os.Create(fmt.Sprintf("%s/private.pem", filePath))
	if err != nil {
		return err
	}

	err = pem.Encode(file, block)
	if err != nil {
		return err
	}
	// 生成公钥文件
	publicKey := &privateKey.PublicKey
	derPkix, err := x509.MarshalPKIXPublicKey(publicKey)
	if err != nil {
		return err
	}
	block = &pem.Block{
		Type:  "PUBLIC KEY",
		Bytes: derPkix,
	}
	file, err = os.Create(fmt.Sprintf("%s/public.pem", filePath))
	if err != nil {
		return err
	}
	// fmt.Println("私钥:", base64.StdEncoding.EncodeToString(block.Bytes))
	err = pem.Encode(file, block)
	if err != nil {
		return err
	}
	return nil
}


转载于:https://my.oschina.net/golang/blog/387548

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值