【发布时间】:2020-04-04 23:55:05
【问题描述】:
我正在尝试在 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 生成在一个函数中。
【问题讨论】:
-
如果您使用
BN_new()而不是malloc()为BIGNUM分配空间,问题会消失吗(我很确定这是您应该做的)。 -
这解决了@EmployedRussian 的问题,谢谢 你能解释一下用
malloc和BN_new分配内存的区别吗? -
你的代码是如何编译的?你应该得到一个错误,
BIGNUM是一个不完整的类型。 -
对不起,我忘记包含我复制代码时使用的所有库。我也有:
#include <openssl/bn.h>我编辑了初始消息
标签: c openssl segmentation-fault rsa