[英]Parse curve25519 keys generated using openssl in Go
使用OpenSSL
1.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的解析function。 有人有想法嗎?
我試過了:
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
。
由於目前無法在標准庫中解析 X25519 密鑰,因此您可能必須“手動”執行此操作。
您可以通過使用encoding/asn1
庫來“正確地”解碼密鑰,但在這種情況下,有一種更簡單的方法。
事實證明,對於私鑰和公鑰,實際密鑰只是密鑰的 base64 解碼塊的最后 32 個字節。
所以你可以這樣做:
block, _ := pem.Decode([]byte(pemString))
key := block.Bytes[len(block.Bytes)-32:]
這對公鑰和私鑰都有效,並且會給你一個 32 字節的[]byte
包含適當的密鑰。
由於-----END PUBLIC KEY-----
之前的制表符/空格,您的內聯鍵值不正確
結果block
為nil
,導致后續function出現segfault。
這是解碼部分的快速修復:
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
function 無法識別此密鑰算法。
2009/11/10 23:00:00 Parse PKI Error: x509: unknown public key algorithm
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.