c++ - 访问违规写入位置

标签 c++ openssl rsa

我有以下代码:

#include <openssl/bn.h>
#include <openssl/rsa.h>

unsigned char* key;
RSA* rsa = RSA_new();
rsa = RSA_generate_key(1024,65537,NULL,NULL);
//init pubkey
key[BN_num_bytes(rsa->n)] = '\0';
BN_bn2bin(rsa->n, key);
printf("RSA Pub: %s\n", key);
RSA_free( rsa );
rsa = NULL;

调试器告诉我线上有一个问题“访问冲突写入位置”

key[BN_num_bytes(rsa->n)] = '\0';

如果我注释掉那一行,问题就会转移到

BN_bn2bin(rsa->n, key);

关于如何解决此问题的任何建议都很好。

最佳答案

因为 key 没有指向任何东西,而且你已经用数组符号下标引用了它,所以这就是源代码。 key如何获取value。您正在覆盖或践踏其他一些不属于您的内存块,因此被 Windows 捕获的“访问冲突”。仔细检查您的代码并确保该变量已被 malloc 或 new。

作为旁注,为了您的理智,最好这样声明

unsigned char *key = NULL;

这样,如果您尝试访问 key 而不是 malloc'd/new',您将收到内存异常错误(很容易确定为这个错误)。认为它使调试更容易。

希望对您有所帮助, 此致, 汤姆。

关于c++ - 访问违规写入位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1834164/

相关文章:

c++ - 黑盒系统。自定义主机上的安全软件

c++ - 对于 malloc() 失败是否有等效的 set_new_handler()?

c - 打开SSL : What does RSA n e d p q parameters represent?

python - Crypto.PublicKey RSA key 大小减一?

python - 扩展欧几里德算法的不同实现会产生不同的结果?

c++ - 使用 merge 合并 C++ 中的两个列表

c++ - 如何从二进制文件中获取应用程序的版本号?

android - 一个自签名证书来统治他们? Chrome、Android 和 iOS

android - openSSL使用Android的NDK问题

使用 OpenSSL 的 PHP 加密/解密对我不起作用