我有以下代码:
#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);
有关如何解决此问题的任何建议都会很棒。
答案 0 :(得分:2)
由于key
未指向任何内容,并且您使用数组表示法下标引用它,因此它就是源代码。密钥如何获得价值。你正在覆盖或践踏不属于你的其他内存块,因此被Windows捕获的“访问冲突”。仔细检查您的代码并确保变量已被malloc'd或new'd。
作为旁注,最好是你的理智宣称它是这样的
unsigned char *key = NULL;
通过这种方式,如果您尝试访问key
而没有malloc'd / new'd,您将收到内存异常错误(可以轻松地将其固定到此)。考虑一下,它使调试变得更加容易。
希望这有帮助, 最好的祝福, 汤姆。
答案 1 :(得分:1)
您有访问冲突,因为您尝试使用空终止符分配密钥,但尚未为密钥分配任何内存。我们需要知道你想要完成什么。
答案 2 :(得分:1)
您没有为密钥分配任何内存 - 第一次使用时是您尝试将元素设置为0时。
答案 3 :(得分:0)
在这种情况下分配适量内存的正确解决方案是:
key = malloc(BN_num_bytes(rsa->n));
BN_bn2bin(rsa->n, key);