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

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

解析 Go 中使用 openssl 生成的 curve25519 鍵

解析 Go 中使用 openssl 生成的 curve25519 鍵

Go
蕪湖不蕪 2023-07-26 17:26:46
使用OpenSSL1.1 及或更高版本,我能夠生成 curve25519 密鑰:openssl genpkey -algorithm x25519這會生成以下形式的私鑰:-----BEGIN PRIVATE KEY-----MC4CAQAwBQYDK2VuBCIEIDgk3GuFMIaUJd3m95jn/Z8oU+cK9FzPoidIDn/bqRlk-----END PRIVATE KEY-----我想在 Go 中解析這個密鑰文件,并可能使用golang.org/x/crypto/nacl/box來使用它。查看crypto/x509文檔,我找不到解析 curve25519 的解析函數。有人有主意嗎?我試過:pKey := `-----BEGIN PUBLIC KEY-----MCowBQYDK2VuAyEAfLLsWKkI/7EmTOkSf4fyHuRHDnKk6qNncWDzV8jlIUU=-----END PUBLIC KEY-----`block, _ := pem.Decode([]byte(pKey))key, err := x509.ParsePKIXPublicKey(block.Bytes)if err != nil {? ? fmt.Println(err)}我得到了錯誤unknown public key algorithm。
查看完整描述

2 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

由于目前無法解析標準庫中的 X25519 密鑰,因此您可能必須“手動”執行此操作。

您可以通過使用encoding/asn1庫來解碼密鑰來“正確”地完成此操作,但在這種情況下,有一種更簡單的方法。

事實證明,對于私鑰和公鑰來說,實際密鑰只是密鑰的 Base64 解碼塊的最后 32 個字節。

所以你可以這樣做:

block,?_?:=?pem.Decode([]byte(pemString))
key?:=?block.Bytes[len(block.Bytes)-32:]

這適用于公鑰和私鑰,并為您提供[]byte包含適當密鑰的 32 字節。


查看完整回答
反對 回復 2023-07-26
?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

由于之前的制表符/空格,您的內聯鍵值格式不正確-----END PUBLIC KEY-----


結果block就是nil導致后續函數出現段錯誤。


這是解碼部分的快速修復:


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函數無法識別該密鑰算法。


2009/11/10 23:00:00 解析 PKI 錯誤:x509:未知的公鑰算法


查看完整回答
反對 回復 2023-07-26
  • 2 回答
  • 0 關注
  • 206 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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