gpt4 book ai didi

c++ - 如何以可读的方式读写 "EVP_PKEY"中包含的公钥和私钥?

转载 作者:行者123 更新时间:2023-11-30 16:05:57 47 4
gpt4 key购买 nike

我想以人类可读的形式显示 EVP_PKEY_keygen 函数的参数“pkey”中包含的公钥和私钥对,也就是说,显示一个编码器 key ,例如:1GERarDJyXsANQqWGGdC3C26GA8K9yMQ7n。这是一段代码:参数和 key 的生成:

 EVP_PKEY_CTX *ctx;
EVP_PKEY *pkey = NULL;

ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL);
if(ctx == NULL)
{
std::cout << "error 1" << std::endl;
}
if(EVP_PKEY_keygen_init(ctx) <= 0)
{
std::cout << "error 2" << std::endl;
}
if(EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, NID_X9_62_prime256v1) <= 0)
{
std::cout << "error 3" << std::endl;
}
if(EVP_PKEY_keygen(ctx, &pkey) <= 0)
{
std::cout << "error 4" << std::endl;
}
EVP_PKEY_CTX_free(ctx);

我的尝试1显示“ppkey”中包含的私钥

EC_KEY *key;
if(!(key = EVP_PKEY_get1_EC_KEY(pkey)))
{
std::cout << "error 5" << std::endl;
}
const BIGNUM *prvkey;
if(!(prvkey = EC_KEY_get0_private_key(key)))
{
std::cout << "error 6" << std::endl;
}
unsigned char *to = NULL;
if(!BN_bn2mpi(prvkey, to))
{
std::cout << "error 7" << std::endl;
}
std::cout << *prvkey <<std::endl;

这是错误显示:

error: no match for 'operator<<' (operand types are 'std::ostream' {aka 'std::basic_ostream<char>'} and 'const BIGNUM' {aka 'const bignum_st'})|

如何在 std::cout 中显示“*ppkey”并纠正此错误?

我的尝试2显示“ppkey”中包含的私钥:

  BIO *bp = NULL;
if(!EVP_PKEY_print_private(bp, pkey, 1, NULL))
{
std::cout << "error 5" << std::endl;
}
std::cout << bp <<std::endl;

错误来自函数,因为要遵守 if 条件。如何很好地定义函数的参数3,因为我认为问题就出在这里?

还有其他功能、其他方法来显示和写入按键吗?

请帮帮我

最佳答案

您正在为 BIO (bp) 参数传递 NULL:

 BIO *bp = NULL;
if(!EVP_PKEY_print_private(bp, pkey, 1, NULL))

这将导致 EVP_PKEY_print_private 失败。 BIO 代表要打印关键数据的位置,并且必须为非 NULL。如果您只想打印到 stdout 那么您可以像这样创建它:

BIO *bp = BIO_new_fp(stdout, BIO_NOCLOSE);

之后一定要释放 BIO:

BIO_free(bp);

关于c++ - 如何以可读的方式读写 "EVP_PKEY"中包含的公钥和私钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60104683/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com