gpt4 book ai didi

c - EVP 读取 PEM 私钥无法正常工作

转载 作者:太空宇宙 更新时间:2023-11-04 02:38:30 27 4
gpt4 key购买 nike

当我运行以下代码时,它生成一个 key ,将其写入一个字符串,打印它,将其读入 key ,然后再次打印,针对 OpenSSL_1_0_2e:

#include <openssl/evp.h>
#include <openssl/pem.h>
#include <openssl/aes.h>
#include <openssl/err.h>
#include <openssl/rand.h>

#define RSA_KEYLEN 2048
int main()
{
// Key generation
EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL);
EVP_PKEY* key = NULL;
EVP_PKEY_keygen_init(ctx);
EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, RSA_KEYLEN);
EVP_PKEY_keygen(ctx, &key);
EVP_PKEY_CTX_free(ctx);

// Serialize to string
unsigned char* keyStr;
BIO *bio = BIO_new(BIO_s_mem());
PEM_write_bio_PrivateKey(bio, key, NULL, NULL, 0, 0, NULL);
int priKeyLen = BIO_pending(bio);
keyStr = (unsigned char*)malloc(priKeyLen + 1);
BIO_read(bio, keyStr, priKeyLen);
keyStr[priKeyLen] = '\0';
BIO_free_all(bio);

// Print the string
printf("%s", keyStr);

// Reset the key
EVP_PKEY_free(key);
key = NULL;

// Read from string
bio = BIO_new(BIO_s_mem());
BIO_write(bio, keyStr, priKeyLen);
PEM_read_bio_PrivateKey(bio, &key, NULL, NULL);
BIO_free_all(bio);

// Free the string
free(keyStr);

// Serialize to string (again)
bio = BIO_new(BIO_s_mem());
PEM_write_bio_PrivateKey(bio, key, NULL, NULL, 0, 0, NULL);
priKeyLen = BIO_pending(bio);
keyStr = (unsigned char*)malloc(priKeyLen + 1);
BIO_read(bio, keyStr, priKeyLen);
keyStr[priKeyLen] = '\0';
BIO_free_all(bio);

// Print string
printf("%s", keyStr);
}

第二个输出中的私钥显然太短了。我做错了什么?

最佳答案

我的特定问题的解决方案是我试图在 EVP_PKEY 上设置公钥和私钥,认为我需要加载这两个 key 才能将其用作 key 对。实际上,您只加载两者之一。有了私钥,就可以推导出公钥。

关于c - EVP 读取 PEM 私钥无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34377695/

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