[英]How to convert CNG key to OpenSSL EVP_PKEY (and vice versa)?
[英]How to read and write the public and private key contained in "EVP_PKEY" in a readable way?
我想以人類可讀的形式顯示包含在“pkey”(EVP_PKEY_keygen 函數的參數)中的公鑰和私鑰對,即顯示這樣的編碼器密鑰,例如:1GERarDJyXsANQqWGGdC3C26GA8K9yMQ7n。 這是一段代碼:生成參數和鍵:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.