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

2019-01-17  本文已影响0人  够浪你大哥
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秘钥对成功!")
}
上一篇 下一篇

猜你喜欢

热点阅读