将 ECDSA 十六进制私钥转换为公钥

Posted

技术标签:

【中文标题】将 ECDSA 十六进制私钥转换为公钥【英文标题】:Convert ECDSA private hex key to public key 【发布时间】:2013-11-20 02:22:42 【问题描述】:

我正在使用以下两行来生成 ECDSA 私钥的十六进制:

openssl ecparam -genkey -name secp256k1 -out data.pem

openssl ec -in data.pem -outform DER|tail -c +8|head -c 32|xxd -p -c 32

那些输出是这样的:

059f2c8f5b1978bcc02d4b41e75c3aae99f3194fb06b53ffd256178e1367a2a6

然后如何使用该十六进制密钥生成公共 ECDSA 密钥,类似这样?

043d6fa62769c10ceb28d3c13ae1e2329888e99d9c8bf854cc5bdcea0b7cd3002a0f5d244e35eec297c8eb4098b75295328cdeebe7e39a5ac7539f0fc146fa3c99

感谢任何帮助。

【问题讨论】:

你为什么要给你的钥匙一个名字data?你不觉得这是不必要的混乱吗? 【参考方案1】:

试试这个

openssl ec -in data.pem -pubout -out pubkey.pem

【讨论】:

【参考方案2】:

您可以获取从

获得的私钥的最后 65 个字节
openssl ecparam -genkey -name secp256k1 -out data.pem
openssl ec -in data.pem -outform DER

这也是你的公钥。

【讨论】:

还有你的私钥。想象一下将其发送给某人。好的,您描述了占用 65 个字节,这仅对特定的曲线大小有效(从未提及),并且您的代码实际上也没有实现它。结果是只是公钥点,大多数实现不接受,并且缺少参数。

以上是关于将 ECDSA 十六进制私钥转换为公钥的主要内容,如果未能解决你的问题,请参考以下文章

sh 将密钥从二进制(由生成密钥生成)转换为pem格式。适用于私钥和公钥

在给定曲线和私有指数的情况下创建 ECDSA 私钥?

Javascript ECDSA 获取私钥和​​公钥?

Javascript:从私钥生成 ECDSA 公钥

从私钥派生 ECDSA 公钥

如何在 GoLang 中分离编组的 ecdsa 公钥和私钥