gpt4 book ai didi

go - 使用 golang 以与 openssl genrsa 相同的方式获取 RSA key

转载 作者:行者123 更新时间:2023-12-03 10:07:39 25 4
gpt4 key购买 nike

openssl genrsa -out $1.rsa $2
openssl rsa -in $1.rsa -pubout > $1.rsa.pub
我将两个参数传递给这个小脚本,我怎样才能使用 golang 来做到这一点?我没有得到正确的解析格式。

最佳答案

要生成 RSA key 对并将私钥和公钥写入单独的文件,您需要执行以下操作:

  • 使用 rsa.GenerateKey 生成 RSA key 对
  • 使用 rsa.PrivateKey.Public 获取公钥组件
  • 使用 x509.MarshalPKCS1PrivateKey 将 key 转换为 PKCS#1 ASN.1 DER 形式和 x509.MarshalPKCS1PublicKey分别
  • 使用 pem.EncodeToMemory 编码成 PEM block
  • 写入文件

  • 完整的操作集如下所示,其中 filenamebitSize是你的 $1$2分别论据。
    package main

    import (
    "crypto/rand"
    "crypto/rsa"
    "crypto/x509"
    "encoding/pem"
    "io/ioutil"
    )

    func main() {
    filename := "key"
    bitSize := 4096

    // Generate RSA key.
    key, err := rsa.GenerateKey(rand.Reader, bitSize)
    if err != nil {
    panic(err)
    }

    // Extract public component.
    pub := key.Public()

    // Encode private key to PKCS#1 ASN.1 PEM.
    keyPEM := pem.EncodeToMemory(
    &pem.Block{
    Type: "RSA PRIVATE KEY",
    Bytes: x509.MarshalPKCS1PrivateKey(key),
    },
    )

    // Encode public key to PKCS#1 ASN.1 PEM.
    pubPEM := pem.EncodeToMemory(
    &pem.Block{
    Type: "RSA PUBLIC KEY",
    Bytes: x509.MarshalPKCS1PublicKey(pub.(*rsa.PublicKey)),
    },
    )

    // Write private key to file.
    if err := ioutil.WriteFile(filename+".rsa", keyPEM, 0700); err != nil {
    panic(err)
    }

    // Write public key to file.
    if err := ioutil.WriteFile(filename+".rsa.pub", pubPEM, 0755); err != nil {
    panic(err)
    }
    }
    这将生成以下两个文件:
    key .rsa :
    -----BEGIN RSA PRIVATE KEY-----
    MIIJJwIBAAKCAgEAsmJ+97V6zCOQdXDd0pivvgoXynKAHaImVdafXDwN+Eb2xKTg
    zjhthm144DZzO9/SllCdyLwhXKBQkgim2S5A4iV5w6/yvChqL72+BrItP0+1tAgY
    vt/CcShDtMdSikW13BN3+SGZSP9yrEsdU2KMK6HSGcSxMpki/XW2BbGkdr3gMtpM
    ...
    S8tZZ/gby/k9nG7Pbw55QM8/Jkyvy/lPP94HrE+MuIiTEd9BG4c7CRNIuE6QoCjp
    1+NIbqEPJTJMfH57cx8R/stLh2nBGcngjmWz+VWhufzhsOr7Wl8Xd6hf13hm4hWG
    y+2pknoTGvw05tiU/eLAbNimtWMOtEdfePzT5NTjV++9kJSr470eyDs2bg==
    -----END RSA PRIVATE KEY-----
    key.rsa.pub :
    -----BEGIN RSA PUBLIC KEY-----
    MIICCgKCAgEAsmJ+97V6zCOQdXDd0pivvgoXynKAHaImVdafXDwN+Eb2xKTgzjht
    hm144DZzO9/SllCdyLwhXKBQkgim2S5A4iV5w6/yvChqL72+BrItP0+1tAgYvt/C
    ...
    8Xil1cP/5LxIMa1WGHEG1jzrWJkyaVXHS0JOi3FcI4KPQttut2rWpSi3MtAlmuTx
    k/AfM3oNnAUlcjYNa+onSs7GgLhd1A5/EiLGMR304uWKno8HrYQfESsCAwEAAQ==
    -----END RSA PUBLIC KEY-----
    我建议您熟悉链接的功能,它们的文档非常有用。还有其他可用的格式选项(例如:PKCS#8 和 PKIX)以及用于私钥的加密 PEM。

    关于go - 使用 golang 以与 openssl genrsa 相同的方式获取 RSA key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64104586/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com