我使用openssl从曲线“secp128r1”生成ECC的密钥对
我遵循的步骤:
>
首先,我使用命令生成了一个私钥
openssl ecparam -genkey -name secp128r1 -noout -out private.pem
然后,我使用命令查看了相应的公钥
openssl ec-inprivate.pem-text-noout
它显示的输出如下:
读取EC密钥
私钥:(128位)
priv:
00:9f:bf:2b:bd:06:86:3a:a1:bc:7c:3e:90:57:40:
f4:bc
pub:
04:04:ce:24:34:d4:cb:f2:58:94:2f:8a:5f:06:d7:
ASN1 OID:secp128r1
我希望从这里生成的公钥中显式地获得x和y分量,请有人建议正确的方法吗
上述公钥长度为264位,因此无法按原样获取(/split)。
谢谢
如果有人想在nodejs中这样做,就像我在需要为其他人/应用程序共享公钥(jwk)来验证我的签名时所做的那样...下面是一种从secp256k1公钥导出X和Y坐标的快速方法:
import base64url from 'base64url';
function getCoordinatesFromSecp256k1PublicKey(uncompressedHexPubKey: string) {
const publicKeyBuff = Buffer.from(uncompressedHexPubKey, 'hex');
const pubKeyCoordsBuff = publicKeyBuff.slice(1); // First byte just signals that it is uncompressed. TRASH!
const halfLen = Buffer.byteLength(pubKeyCoordsBuff) / 2; // should be 32;
const x = pubKeyCoordsBuff.slice(0, halfLen);
const y = pubKeyCoordsBuff.slice(halfLen, Buffer.byteLength(pubKeyCoordsBuff) + 1);
return {
x: base64url.fromBase64(x.toString('base64')),
y: base64url.fromBase64(y.toString('base64'))
};
}
这样,您可以这样返回您的JWK数据:
const { x, y } = getCoordinatesFromSecp256k1PublicKey(pubKey);
JSON.stringify(
{
use: 'sig',
kid: 'my-keyid',
alg: 'ECDSA',
kty: 'EC',
crv: 'P-256',
x,
y,
},
null,
2
)
Pub:
04:04:ce:24:34:d4:cb:f2:58:94:2f:8a:5f:06:d7:
3f:ed:5a:50:ef:fb:cc:b7:49:62:16:62:9e:aa:d5:
30:a8:a5
0x04
表示未压缩的形式04:ce:24:34:d4:cb:f2:58:94:2f:8a:5f:06:d7:3f:ed
5a:50:ef:fb:cc:b7:49:62:16:62:9e:aa:d5:30:a8:a5
UPD。找到了这个包含更多细节的网站。
我正在使用openssl库,我想用BIO从. pem文件中读取公钥。我尝试了这个,但我的rsa变量仍然未初始化: 当我调试应用程序时,它向我显示如下内容: 我的文件有效,密钥是按照PKCS#1格式生成的。我用asn1解析器解析了它。
我正在使用Ruby 2.5.x OpenSSL库研究椭圆曲线。我可以很容易地使用 但是给定一个私钥,我想重新生成公钥。 我知道OpenSSL可以做到这一点,因为命令行允许您这样做,Ruby比特币项目也可以做到这一点。但是Ruby比特币项目使用FFI而不是Ruby提供的接口有自己的OpenSSL接口。 Ruby 2.5.x openssl 库是否没有公开足够的 OpenSSL 接口,以便能够从私钥生
问题内容: 我有PEM格式+ PKCS#1(我想)的RSA公钥: 我想在Python中获取其ASN1编码版本的SHA1摘要。第一步应该是读取此密钥,但是我在PyCrypto中无法做到这一点: PyCrypto的文档说支持PEM + PKCS#1,所以我很困惑。我也尝试过M2Crypto,但事实证明M2Crypto不支持PKCS#1,而仅支持X.509。 问题答案: PyCrypto支持 PKCS#
从这里我指出了自己如何获得公钥,并使用EC_POINT_bn2point,而不是hex2point,根据OpenSSL源代码,它在内部执行BN_hex2bn。 那么,为什么EC_POINT_bn2point返回null呢?我正在认真考虑重新编译OpenSSL,并放一些调试例程来找出它失败的原因。
以下命令生成一个包含公钥和私钥的文件: 资料来源:这里 使用OpenSSL,私钥也包含公钥信息,因此公钥不需要单独生成 如何从私钥中提取公钥。pem文件? 谢谢
我使用secp192r1曲线生成了ECC公钥和私钥。公共密钥数组长度为75,私有密钥数组长度125。为什么私钥比公钥长?为什么私钥的长度不是公钥的两倍?为什么由于secp192r1私钥不是192位=24字节?