亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 golang 以與 openssl genrsa 相同的方式獲取 RSA 密鑰

使用 golang 以與 openssl genrsa 相同的方式獲取 RSA 密鑰

Go
30秒到達戰場 2022-07-04 16:30:40
openssl genrsa -out $1.rsa $2 openssl rsa -in $1.rsa -pubout > $1.rsa.pub我將兩個參數傳遞給這個小腳本,我怎樣才能使用 golang 來做到這一點?我沒有得到正確的解析格式。
查看完整描述

1 回答

?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

要生成 RSA 密鑰對并將私鑰和公鑰寫入單獨的文件,您需要執行以下操作:

  1. 使用rsa.GenerateKey生成 RSA 密鑰對

  2. 使用rsa.PrivateKey.Public獲取公鑰組件

  3. 分別使用x509.MarshalPKCS1PrivateKeyx509.MarshalPKCS1PublicKey將密鑰轉換為 PKCS#1 ASN.1 DER 形式

  4. 使用pem.EncodeToMemory編碼成 PEM 塊

  5. 寫出文件

完整的操作集如下所示,其中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)

    }

}

這將生成以下兩個文件:


密鑰.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。


查看完整回答
反對 回復 2022-07-04
  • 1 回答
  • 0 關注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號