zoukankan      html  css  js  c++  java
  • 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
    ", name+".pri", name+".pub")
    	return nil
    }
    
    func main() {
    	genkey("rsa", "password")
    }
    

      

      

  • 相关阅读:
    372. Super Pow
    桌面远程连接:发生身份验证错误,要求的函数不受支持
    Web Service代理类生成工具
    Razor语法大全
    Web Serveice服务代理类生成及编译
    配置WCF Test Client
    我与春风皆过客,你携秋水揽星河
    机器学习(十三) 集成学习和随机森林(下)
    机器学习(十三) 集成学习和随机森林(上)
    机器学习(十二) 决策树(下)
  • 原文地址:https://www.cnblogs.com/wuyepeng/p/14382255.html
Copyright © 2011-2022 走看看