如何在openssl-ecc中获取十六进制格式的私钥

How to get privatekey in openssl ecc with the format hex

本文关键字:十六进制 格式 私钥 获取 openssl-ecc      更新时间:2023-10-16

代码:

EC_KEY *key;
if (NULL == (key = EC_KEY_new_by_curve_name(NID_secp224r1)))
handleErrors();
if (1 > EC_KEY_generate_key(key)) handleErrors();
const BIGNUM *prv = EC_KEY_get0_private_key(key);
const EC_GROUP *group = EC_KEY_get0_group(key);
const EC_POINT *pub = EC_KEY_get0_public_key(key);
char* hexPubkey = EC_POINT_point2hex(group, pub, EC_KEY_get_conv_form(key), NULL);
char* hexPrikey=BN_bn2hex(prv);

我的结果:

hexPubkey:04EAD3AF4BA89F513B2D89FC749C43CC7B95523F1BD40A5713C5228F91B5F928D43B396C64A3293053550065C02E9A06B4FB078C4944BD0933长度:57

六进制主键:5D5356F3551602A89710DA40CC24FB6CDBB851FE612C977C9AB0F393长度:114

正确的结果:hexPubkey:0438187517AEEDB6F83FAA0EB60EFF4C1B77A78D66F17CB04D92B7588826A64B78E0B3965C72438860D4B3897893B31397D1625EEA0E41长度:57

hexPrikey:30820144020101041C20F21D6B7FE0D5E1D21CB57AFE6FAD85A5AC31AE0596B972E01877A081E23081DF020101302806072A8648CE3D0101021D00FFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000013053041CFFFFFFFFFFFF FFFFFFFFF FFFFFFFFFF FFFFFFFFFF041CB4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4031500BD71344799D5FCDC45B59FA3B9AB8F6A948BC5043904B70E0CBD6BB4BF7F321390B94A03C1D356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffff fffffff16a2e0b8f03e13dd29455c2a3d020101a13c033a0004381987517需要f83faa0eb60eff4c1b7a78d66ff17cb04d92b37588826a64b78e0b3a965c72438860d4b389783bb31397d1625eea01

长度:328

从私钥的长度来看,我的私钥显然错了,不是我的写法错了吗?

BIO *bio = BIO_new(BIO_s_mem());
PEM_write_bio_ECPrivateKey(bio, key, NULL, NULL, 0, NULL, NULL);
int keylen = BIO_pending(bio);
char *pem_key = (char *) calloc(keylen + 1, 1); 
BIO_read(bio, pem_key, keylen);
cout << pem_key << endl;
BIO_free_all(bio);
EC_KEY_free(key);
free(pem_key);