在 C 中用相同的代码生成两个 RSA 密钥
Generate two RSA keys in the same code in C
我试图在 C 中生成多个 RSA 密钥,但我遇到了以下代码的分段错误:
#include <stdio.h>
#include <stdlib.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/bio.h>
#include <openssl/bn.h>
int main () {
RSA* keys = RSA_new();
BIGNUM* e = malloc(sizeof(BIGNUM));
BN_generate_prime_ex(e, 16, 1, NULL, NULL, NULL);
int r = RSA_generate_key_ex(keys, 2048, e, NULL);
RSA* keys2 = RSA_new();
BIGNUM* e2 = malloc(sizeof(BIGNUM));
BN_generate_prime_ex(e2, 16, 1, NULL, NULL, NULL);
int r2 = RSA_generate_key_ex(keys2, 2048, e2, NULL);
return 0;
}
但是,以下代码似乎运行良好:
#include <stdio.h>
#include <stdlib.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/bio.h>
#include <openssl/bn.h>
int main () {
RSA* keys = RSA_new();
RSA* keys2 = RSA_new();
BIGNUM* e = malloc(sizeof(BIGNUM));
BIGNUM* e2 = malloc(sizeof(BIGNUM));
BN_generate_prime_ex(e, 16, 1, NULL, NULL, NULL);
BN_generate_prime_ex(e2, 16, 1, NULL, NULL, NULL);
int r = RSA_generate_key_ex(keys, 2048, e, NULL);
int r2 = RSA_generate_key_ex(keys2, 2048, e2, NULL);
return 0;
}
谁能帮我弄清楚为什么?
我真的很想实现第一个解决方案,因为我的RSA生成是在一个函数中。
问题是这个语句没有正确初始化 BIGNUM
:
BIGNUM* e = malloc(sizeof(BIGNUM));
相反,应该这样做:
BIGNUM* e = BN_New();
Can you explain the difference between allocating memory with malloc and with BN_new ?
BN_New 的来源表明它比 malloc
多一点——它清零内存并设置一个标志。
P.S。使用最新的 OpenSSL,原始程序无法编译(即使在添加缺失的 #include <openssl/bn.h>
之后)。开发者隐藏了BIGNUM
的定义,所以不会再出现这个错误了。
我试图在 C 中生成多个 RSA 密钥,但我遇到了以下代码的分段错误:
#include <stdio.h>
#include <stdlib.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/bio.h>
#include <openssl/bn.h>
int main () {
RSA* keys = RSA_new();
BIGNUM* e = malloc(sizeof(BIGNUM));
BN_generate_prime_ex(e, 16, 1, NULL, NULL, NULL);
int r = RSA_generate_key_ex(keys, 2048, e, NULL);
RSA* keys2 = RSA_new();
BIGNUM* e2 = malloc(sizeof(BIGNUM));
BN_generate_prime_ex(e2, 16, 1, NULL, NULL, NULL);
int r2 = RSA_generate_key_ex(keys2, 2048, e2, NULL);
return 0;
}
但是,以下代码似乎运行良好:
#include <stdio.h>
#include <stdlib.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/bio.h>
#include <openssl/bn.h>
int main () {
RSA* keys = RSA_new();
RSA* keys2 = RSA_new();
BIGNUM* e = malloc(sizeof(BIGNUM));
BIGNUM* e2 = malloc(sizeof(BIGNUM));
BN_generate_prime_ex(e, 16, 1, NULL, NULL, NULL);
BN_generate_prime_ex(e2, 16, 1, NULL, NULL, NULL);
int r = RSA_generate_key_ex(keys, 2048, e, NULL);
int r2 = RSA_generate_key_ex(keys2, 2048, e2, NULL);
return 0;
}
谁能帮我弄清楚为什么?
我真的很想实现第一个解决方案,因为我的RSA生成是在一个函数中。
问题是这个语句没有正确初始化 BIGNUM
:
BIGNUM* e = malloc(sizeof(BIGNUM));
相反,应该这样做:
BIGNUM* e = BN_New();
Can you explain the difference between allocating memory with malloc and with BN_new ?
BN_New 的来源表明它比 malloc
多一点——它清零内存并设置一个标志。
P.S。使用最新的 OpenSSL,原始程序无法编译(即使在添加缺失的 #include <openssl/bn.h>
之后)。开发者隐藏了BIGNUM
的定义,所以不会再出现这个错误了。