Я попробовал приведенный ниже код для генерации пары ключей, но он печатает 8-байтовые данные, которые являются ничем иным, как адресом памяти. Может ли кто-нибудь пролить свет на то, в чем проблема, как распечатать закрытый ключ на 256 бит / 32 байта и соответствующий ему открытый ключ
Я запускаю программу в VS 2010 и установил openssl win32, а также связал openssl в свойствах моего проекта.
выходные данные:
Закрытый ключ: 00156C90
Открытый ключ: 00158cc0
#include "stdafx.h"
#include <iostream>
#include <openssl/obj_mac.h>
#include <openssl/ec.h>
#include <openssl/bn.h>
int main()
{
//EC_KEY* key = EC_KEY_new_by_curve_name(NID_secp224r1);
//EC_KEY* key = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
EC_KEY* key = EC_KEY_new_by_curve_name(NID_secp256k1);
if(!key)
{
std::cerr << "Error creating curve key" << '\n';
return EXIT_FAILURE;
}
if(!EC_KEY_generate_key(key))
{
std::cerr << "Error generating curve key" << '\n';
EC_KEY_free(key);
return EXIT_FAILURE;
}
BIGNUM const* prv = EC_KEY_get0_private_key(key);
if(!prv)
{
std::cerr << "Error getting private key" << '\n';
EC_KEY_free(key);
return EXIT_FAILURE;
}
std::cout << "Private key: " << prv << '\n';
EC_POINT const* pub = EC_KEY_get0_public_key(key);
if(!pub)
{
std::cerr << "Error getting public key" << '\n';
EC_KEY_free(key);
return EXIT_FAILURE;
}
std::cout << "Public key: " << pub << '\n';
// Use keys here ...
EC_KEY_free(key);
}