C++OpenSSL RSA_free如果也使用EVP_PKEY_free,则会给出分段错误
C++ OpenSSL RSA_free give Segmentation fault if EVP_PKEY_free is also used
我正在编写一个小程序来测试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);
和RSA_free(rsa);
给予
`Segmentation fault (core dumped)`
评论其中一个工作正常,除了可能有些东西没有被释放。更改了顺序,但不起作用。
- 其中只有一个就足以正常工作吗?
>请参阅此处的EVP_PKEY_assign_RSA
文档:
https://www.openssl.org/docs/man1.1.1/man3/EVP_PKEY_assign_RSA.html
如该页面上所述:
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(( 也将引用的键设置为键,但它们在内部使用提供的键,因此当释放父 pkey 时,键将被释放。
因此,换句话说,通过EVP_PKEY_assign_RSA()
调用分配的密钥的所有权将转移到EVP_PKEY。释放EVP_PKEY
时,也会释放基础RSA
密钥。因此,成功调用EVP_PKEY_assign_RSA()
后,不得在基础密钥上调用RSA_free()
,否则可能会导致双重释放。
相关文章:
- 分段故障(堆芯转储)矢量
- 数组的指针从不分段故障
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 在线编译器中的分段C++没有打印消息
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 不断得到分段错误和free()无效指针
- 使用 free() 时的分段错误
- 当我使用"free"释放内存时违反分段