第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Go 加密庫創(chuàng)建的 PKCS1 公鑰與“openssl rsa ...”之間的區(qū)別

Go 加密庫創(chuàng)建的 PKCS1 公鑰與“openssl rsa ...”之間的區(qū)別

Go
蝴蝶刀刀 2023-01-03 11:15:43
我嘗試使用 Go 的 rsa 和 x509 包生成一對 PKCS8 編碼的私鑰和相應(yīng)的 PKCS1 編碼的公鑰。我希望具有與以下 openssl 命令相同的行為:$ openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt$ openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub我在下面添加了我的 Go 實現(xiàn),歸結(jié)為要點。為了使用它,我首先使用GeneratePrivateKey生成一個私鑰(最后附上的示例的位大小為2048),然后使用以下兩種方法對私鑰和公鑰進(jìn)行編碼。但是,當(dāng)運行第二個 openssl 命令以在由我的 Go 實現(xiàn)編碼的私鑰上對公鑰進(jìn)行編碼時,公鑰不同(我在下面提供了一個差異示例)。特別是,它看起來好像 openssl 輸出通過前綴擴(kuò)展了我的 Go 實現(xiàn)的輸出。我將不勝感激對差異的任何解釋(在最好的情況下,我將如何修復(fù)我的代碼)。非常感謝你!我的 Go 代碼如下所示:package xyzimport (    "crypto/rand"    "crypto/rsa"    "crypto/x509"    "encoding/pem")func GeneratePrivateKey(bitSize int) (*rsa.PrivateKey, error) {    privateKey, err := rsa.GenerateKey(rand.Reader, bitSize)    if err != nil {        return nil, err    }    err = privateKey.Validate()    if err != nil {        return nil, err    }    return privateKey, nil}func EncodePrivateKeyToPEM(privateKey *rsa.PrivateKey) (string, error) {    privateDER, err := x509.MarshalPKCS8PrivateKey(privateKey)    if err != nil {        return "", err    }    privateBlock := pem.Block{        Type:    "RSA PRIVATE KEY",        Headers: nil,        Bytes:   privateDER,    }    privatePEM := pem.EncodeToMemory(&privateBlock)    return string(privatePEM), nil}
查看完整描述

1 回答

?
慕蓋茨4494581

TA貢獻(xiàn)1850條經(jīng)驗 獲得超11個贊

OpenSSL 語句生成 PKCS#8 格式的私鑰和 X.509/SPKI 格式的公鑰,均采用 PEM 編碼。

使用 Go Code 生成的私鑰具有 PKCS#8 格式,但 PEM 編碼使用了錯誤的頁眉和頁腳(正確的是-----BEGIN PRIVATE KEY----------END PRIVATE鍵----- )。解決方法是EncodePrivateKeyToPEM()pem.Block()調(diào)用中相應(yīng)地調(diào)整類型 ( Type: "PRIVATE KEY")。

對于使用 Go 代碼生成的公鑰,情況正好相反:這里,頁眉和頁腳對應(yīng)于 PEM 編碼的 X.509/SPKI 密鑰的頁眉和頁腳。但是,正文是 PKCS#1 格式的。這就是密鑰不同的原因。解決方法是在EncodePublicKeyToPEM()方法MarshalPKIXPublicKey()中使用 X.509/SPKI 格式而不是MarshalPKCS1PublicKey().

順便說一句,檢查密鑰的最佳方法是使用 ASN.1 解析器,例如https://lapo.it/asn1js/


查看完整回答
反對 回復(fù) 2023-01-03
  • 1 回答
  • 0 關(guān)注
  • 206 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號