2 回答

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
由于目前無法解析標(biāo)準(zhǔn)庫中的 X25519 密鑰,因此您可能必須“手動(dòng)”執(zhí)行此操作。
您可以通過使用encoding/asn1
庫來解碼密鑰來“正確”地完成此操作,但在這種情況下,有一種更簡單的方法。
事實(shí)證明,對(duì)于私鑰和公鑰來說,實(shí)際密鑰只是密鑰的 Base64 解碼塊的最后 32 個(gè)字節(jié)。
所以你可以這樣做:
block,?_?:=?pem.Decode([]byte(pemString)) key?:=?block.Bytes[len(block.Bytes)-32:]
這適用于公鑰和私鑰,并為您提供[]byte
包含適當(dāng)密鑰的 32 字節(jié)。

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
由于之前的制表符/空格,您的內(nèi)聯(lián)鍵值格式不正確-----END PUBLIC KEY-----
結(jié)果block就是nil導(dǎo)致后續(xù)函數(shù)出現(xiàn)段錯(cuò)誤。
這是解碼部分的快速修復(fù):
pKey := `-----BEGIN PRIVATE KEY-----
MCowBQYDK2VuAyEAfLLsWKkI/7EmTOkSf4fyHuRHDnKk6qNncWDzV8jlIUU=
-----END PRIVATE KEY-----`
block, _ := pem.Decode([]byte(pKey))
if block == nil || block.Type != "PRIVATE KEY" {
log.Fatal("failed to decode PEM block containing private key")
}
key, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
log.Println("Parse PKI Error:", err)
return
}
游樂場:https://play.golang.org/p/O2wk8rmKGWH
注意:ParsePKIXPublicKey函數(shù)無法識(shí)別該密鑰算法。
2009/11/10 23:00:00 解析 PKI 錯(cuò)誤:x509:未知的公鑰算法
- 2 回答
- 0 關(guān)注
- 198 瀏覽
添加回答
舉報(bào)