非对称加密RSA-秘钥对的生成

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秘钥对成功!")
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容