gpt4 book ai didi

c - 如何使用 PEM - OPENSSL、C、BIO 加密和解密数据

转载 作者:行者123 更新时间:2023-11-30 17:54:13 24 4
gpt4 key购买 nike

下面的代码可以成功加密和解密我的数据。

size_t pri_len;
size_t pub_len;
char *pri_key;
char *pub_key;
char message[AES_KEY_SIZE];
char *encrypted = NULL;
char *decrypted = NULL;

int pub_exp = 37;

RSA *keyPair = RSA_generate_key(2048,pub_exp,NULL,NULL);
BIO *pri = BIO_new(BIO_s_mem());
BIO *pub = BIO_new(BIO_s_mem());
//char passwordTemp[16] = "helloworld";
//pem_password_cb();

PEM_write_bio_RSAPrivateKey(pri,keyPair,NULL,NULL,0,NULL,NULL);
PEM_write_bio_RSAPublicKey(pub,keyPair);

pri_len = BIO_pending(pri);
pub_len = BIO_pending(pub);

pri_key = (char*)malloc(pri_len + 1);
pub_key = (char*)malloc(pub_len + 1);

BIO_read(pri,pri_key,pri_len);
BIO_read(pub,pub_key,pub_len);

pri_key[pri_len] = '\0';
pub_key[pub_len] = '\0';

//generate random number to encrypt
unsigned char randNum[AES_KEY_SIZE];
this->generateRandomNum(randNum,AES_KEY_SIZE);

char *encrypt2 =(char*) malloc(RSA_size(keyPair));
int encrypt_len2;
if((encrypt_len2 = RSA_public_encrypt(AES_KEY_SIZE,randNum,(unsigned char*)encrypt2,keyPair, RSA_PKCS1_OAEP_PADDING))==-1)
{
printf("error");
}
else
{
printf("encrypt success");
}

char *decrypt2 = (char*) malloc(RSA_size(keyPair));
if(RSA_private_decrypt(encrypt_len2,(unsigned char*) encrypt2, (unsigned char*) decrypt2,keyPair, RSA_PKCS1_OAEP_PADDING)==-1)
{
printf("error");
}
else
{
printf("decrypt success");
}

但是,如果我想存储我的 PEM 文件并稍后使用它,它如何再次使用我的 key 来加密和解密数据?

我发现以下函数可用于恢复我的 RSA key ,但是,如果我使用其中一个 key 来解密我的数据,则会发生错误...

:尝试读取或写入 protected 内存

RSA *keyPair2 = PEM_read_bio_RSAPrivateKey(pri,NULL,0,NULL);
RSA *keyPair3 = PEM_read_bio_RSAPublicKey(pub,NULL,0,NULL);

char *decrypt2 = (char*) malloc(RSA_size(keyPair2));
if(RSA_private_decrypt(encrypt_len2,(unsigned char*) encrypt2, (unsigned char*) decrypt2,keyPair2, RSA_PKCS1_OAEP_PADDING)==-1)
{
printf("error");
}
else
{
printf("decrypt success");
}

最佳答案

您需要使用私钥对 key 进行加密,然后保存在文件中。然而,私有(private)安全很重要。您可以考虑使用 PKCS #8 来安全地存储私钥。

关于c - 如何使用 PEM - OPENSSL、C、BIO 加密和解密数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15053373/

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