Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;如果还使用EVP_PKEY_free,则OpenSSL RSA_free会给出分段错误_C++_Openssl_Cryptography_Rsa - Fatal编程技术网

C++ C++;如果还使用EVP_PKEY_free,则OpenSSL RSA_free会给出分段错误

C++ C++;如果还使用EVP_PKEY_free,则OpenSSL RSA_free会给出分段错误,c++,openssl,cryptography,rsa,C++,Openssl,Cryptography,Rsa,我正在写一个小程序来测试RSA上的一个老问题。我需要得到模的素因子。所以我的代码是 int RSAKeyGen(int keySize) { EVP_PKEY *pkey = EVP_PKEY_new(); BIGNUM *bn = BN_new(); BN_set_word(bn, RSA_F4); RSA *rsa = RSA_new(); RSA_generate_key_ex(rsa, keySize, bn, NULL

我正在写一个小程序来测试RSA上的一个老问题。我需要得到模的素因子。所以我的代码是

int RSAKeyGen(int keySize) {

      EVP_PKEY *pkey  = EVP_PKEY_new();

      BIGNUM *bn = BN_new();
      BN_set_word(bn, RSA_F4);

      RSA *rsa = RSA_new();
      RSA_generate_key_ex(rsa, keySize, bn, NULL);

      EVP_PKEY_assign_RSA(pkey, rsa);

      const BIGNUM *p;
      const BIGNUM *q;

      RSA_get0_factors(rsa, &p,&q);

      BN_print_fp(stdout, p);
      puts("\n");
      BN_print_fp(stdout, q);

      RSA_free(rsa);
      EVP_PKEY_free(pkey);
      BN_free(bn);

      return 0;
}
既有
EVP_PKEY_free(PKEY),又有
EVP_PKEY_free(PKEY)
RSA_-free(RSA)给出

`Segmentation fault (core dumped)`
对其中一个进行评论是可行的,但可能有些东西没有被释放。更改了顺序,但不起作用

  • 它们中只有一个足以正常工作吗

    • 很抱歉将此作为回答,但我现在无法发表评论


      您能否提供更多详细信息:您想要测试的问题、转储的内核、EVP_PKEY_free()和RSA_free(),或者其他有助于调试的信息。

      请参阅
      EVP_PKEY_assign_RSA
      的文档:

      如该页所述:

      EVP_PKEY_assign_RSA()、EVP_PKEY_assign_DSA()、EVP_PKEY_assign_DH()、EVP_PKEY_assign_EC_KEY()、EVP_PKEY_assign_POLY1305()和EVP_PKEY_assign_SIPHASH()也将引用的密钥设置为KEY,但它们在内部使用提供的密钥,因此在释放父PKEY时将释放密钥


      换句话说,通过
      EVP\u PKEY\u assign\u RSA()
      调用分配的密钥的所有权被转移到EVP\u PKEY。当您释放
      EVP\u PKEY
      时,它也会释放底层的
      RSA
      密钥。因此,一旦您成功地调用了
      EVP\u PKEY\u assign\u RSA()
      ,您就不能对基础密钥调用
      RSA\u free()
      ,否则可能会导致双重释放。

      在地址“0x5555588670”中断,没有可用的调试信息,或者在程序代码之外。可能我们需要中断点来在生成时观察问题,是否有可能披露测试代码以及您正在测试的问题?如果是的话,那会很有帮助这就是我正在测试的函数。除了免费的部分外,没有其他问题。“我正在编写一个小程序来测试RSA上的一个旧问题”我可以请您提供这个小程序的源代码和RSA上这个问题的名称吗?如果您不能,至少让我知道如何复制核心转储,更多细节会很有帮助,伙计。这是一个开始,RSA从keyGEN开始。主体只称之为这一功能。这一行是明确的答案。Thnx。