Openssl 将ECDSA专用十六进制密钥转换为公钥

Openssl 将ECDSA专用十六进制密钥转换为公钥,openssl,hex,ecdsa,Openssl,Hex,Ecdsa,我使用以下两行生成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

我使用以下两行生成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
非常感谢您的帮助。

试试这个

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

您可以从中获取私钥的最后65个字节

openssl ecparam -genkey -name secp256k1 -out data.pem
openssl ec -in data.pem -outform DER

这也是您的公钥。

为什么要给您的密钥命名
data
?你不认为这是不必要的混淆吗?还有你的私钥。想象一下把它送给某人。好的,您描述了占用65个字节,这只对特定的曲线大小有效(从未提及),并且您的代码实际上也没有实现它。结果就是公钥点,大多数实现都不接受它,并且缺少参数。