【问题标题】:Generate two RSA keys in the same code in C在 C 中的相同代码中生成两个 RSA 密钥
【发布时间】: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 的问题,谢谢 你能解释一下用mallocBN_new 分配内存的区别吗?
  • 你的代码是如何编译的?你应该得到一个错误,BIGNUM 是一个不完整的类型。
  • 对不起,我忘记包含我复制代码时使用的所有库。我也有:#include &lt;openssl/bn.h&gt;我编辑了初始消息

标签: c openssl segmentation-fault rsa


【解决方案1】:

问题是这个语句没有正确初始化BIGNUM:

BIGNUM* e = malloc(sizeof(BIGNUM));

相反,应该这样做:

BIGNUM* e = BN_New();

你能解释一下使用 malloc 和 BN_new 分配内存的区别吗?

BN_New 的来源表明它比malloc 做得更多——它将内存清零并设置一个标志。

附:使用最近的 OpenSSL,原始程序无法编译(即使添加了缺少的 #include &lt;openssl/bn.h&gt;)。开发者已经隐藏了BIGNUM的定义,所以这个错误不再可能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 2018-05-31
    • 2019-08-12
    • 2010-11-10
    相关资源
    最近更新 更多