C++ C++;如果还使用EVP_PKEY_free,则OpenSSL RSA_free会给出分段错误
我正在写一个小程序来测试RSA上的一个老问题。我需要得到模的素因子。所以我的代码是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
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。