golang 生成rsa秘钥对


需求:golang生成秘钥对,秘钥有密码

package main

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

func generateRSAKey(pripath, pubpath, passwd string) error {
	privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
	if err != nil {
		return err
	}

	//通过x509标准将得到的ras私钥序列化为ASN.1 的 DER编码字符串
	x509PrivateKey := x509.MarshalPKCS1PrivateKey(privateKey)

	//使用pem格式对x509输出的内容进行编码
	privateFile, err := os.Create(pripath)
	if err != nil {
		return err
	}
	defer privateFile.Close()

	//构建一个pem.Block结构体对象
	//privateBlock := pem.Block{Type: "RSA Private Key", Bytes: X509PrivateKey}
	privateBlock, err := x509.EncryptPEMBlock(rand.Reader, "RSA Private Key", x509PrivateKey, []byte(passwd), x509.PEMCipherAES256)
	if err != nil {
		return err
	}

	//将数据保存到文件
	err = pem.Encode(privateFile, privateBlock)
	if err != nil {
		return err
	}

	//X509对公钥编码
	X509PublicKey, err := x509.MarshalPKIXPublicKey(&privateKey.PublicKey)
	if err != nil {
		return err
	}

	//pem格式编码
	publicFile, err := os.Create(pubpath)
	if err != nil {
		return err
	}
	defer publicFile.Close()

	//创建一个pem.Block结构体对象
	publicBlock := pem.Block{Type: "RSA Public Key", Bytes: X509PublicKey}
	//将数据保存到文件
	err = pem.Encode(publicFile, &publicBlock)
	if err != nil {
		return err
	}

	return nil
}

func genkey(name, passwd string) error {
	err := generateRSAKey(name+".pri", name+".pub", passwd)
	if err != nil {
		fmt.Println("Rsa key gen failed", err)
		return err
	}

	fmt.Printf("Gen privatekey: %s, publickey: %s\n", name+".pri", name+".pub")
	return nil
}

func main() {
	genkey("rsa", "password")
}

  

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM