package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"fmt"
"os"
)
func GenerateRsaKeyPair(bits int) error {
//1.用GenerateKey函数的随机数生成器rando生成一对具有指定紫薇树的RSA秘钥
//私钥 生成秘钥 随机数生成器
privateKey, err := rsa.GenerateKey(rand.Reader, bits)
if err != nil {
return err
}
fmt.Printf("创建私钥中...\n")
//2.MarshalPKCSlprivatekeyj将rsa私钥序列化为DER编码
derTextPri := x509.MarshalPKCS1PrivateKey(privateKey)
//3.创建一个pem格式的block结构,将der编码的字节写入block
block :=pem.Block{ //创建一个格式结构
Type:"RSA Private Key",
Headers:nil,
Bytes:derTextPri,
}
//创建文件
file1, err := os.Create("rsaPrivateKey.pem")
if err != nil {
return err
}
defer file1.Close()
//4.使用pem的encode方法,将block写入磁盘文件中
// 编码
err = pem.Encode(file1, &block)
if err != nil {
return err
}
fmt.Printf("创建公钥中...\n")
//创建公钥
//1.通过私钥或得公钥
//公钥 以获得的私钥 公钥
publicKey := privateKey.PublicKey
//2.MarshalPKCS1PublicKey将rsa私钥许雷华问DER 编码
derTextPub := x509.MarshalPKCS1PublicKey(&publicKey)//将或得的公钥进行der编码
//3.创建一个pem格式的block结构,将der编码的字节流写入block
blockPub := pem.Block{
Type:"RSA Publick Key",
Headers:nil,
Bytes:derTextPub,
}
//创建文件
file2, err := os.Create("rsaPublicKey.pem")
if err != nil {
return err
}
defer file2.Close()
//4.使用pem的encode方法,将block写入磁盘文件中
err = pem.Encode(file2, &blockPub)//把生成好的块写入文件
if err != nil {
return err
}
return nil
}
func main() {
err := GenerateRsaKeyPair(2048)
if err != nil {
fmt.Printf("创建rsa秘钥对失败:%s\n",err)
}
fmt.Printf("创建rsa秘钥对成功!")
}
非对称加密RSA-秘钥对的生成
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 背景 写了一个基于Crypto++加密库中RSA非对称加密算法实现的对数据加密和解密的一个小程序,Crypto++...
- 在iOS中使用RSA加密解密,需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Pub...