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

使用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。


芜湖不芜
浏览 166回答 2
2回答

qq_遁去的一_1

由于目前无法解析标准库中的 X25519 密钥,因此您可能必须“手动”执行此操作。您可以通过使用encoding/asn1库来解码密钥来“正确”地完成此操作,但在这种情况下,有一种更简单的方法。事实证明,对于私钥和公钥来说,实际密钥只是密钥的 Base64 解码块的最后 32 个字节。所以你可以这样做:block, _ := pem.Decode([]byte(pemString)) key := block.Bytes[len(block.Bytes)-32:]这适用于公钥和私钥,并为您提供[]byte包含适当密钥的 32 字节。

慕神8447489

由于之前的制表符/空格,您的内联键值格式不正确-----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:未知的公钥算法
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go