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

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

Go 加密庫創建的 PKCS1 公鑰與“openssl rsa ...”之間的區別

Go 加密庫創建的 PKCS1 公鑰與“openssl rsa ...”之間的區別

Go
蝴蝶刀刀 2023-01-03 11:15:43
我嘗試使用 Go 的 rsa 和 x509 包生成一對 PKCS8 編碼的私鑰和相應的 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 實現,歸結為要點。為了使用它,我首先使用GeneratePrivateKey生成一個私鑰(最后附上的示例的位大小為2048),然后使用以下兩種方法對私鑰和公鑰進行編碼。但是,當運行第二個 openssl 命令以在由我的 Go 實現編碼的私鑰上對公鑰進行編碼時,公鑰不同(我在下面提供了一個差異示例)。特別是,它看起來好像 openssl 輸出通過前綴擴展了我的 Go 實現的輸出。我將不勝感激對差異的任何解釋(在最好的情況下,我將如何修復我的代碼)。非常感謝你!我的 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貢獻1850條經驗 獲得超11個贊

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

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

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

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


查看完整回答
反對 回復 2023-01-03
  • 1 回答
  • 0 關注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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