我对使用open ssl编程相当新。这是一个代码片段,它应生成一个随机数,然后转换为十六进制格式。 代码正在编译,但是当我运行该文件时,我收到了分段错误:核心转储消息。
#include<stdio.h>
#include<iostream>
#include<openssl/aes.h>
#include<openssl/bn.h>
#include<openssl/rand.h>
using namespace std;
int main()
{
int i;
void *buf;
long *p;
*p=67563;
buf=p;
RAND_seed(buf,9);
BIGNUM *rnd
i= BN_rand( *rnd, 128,0,0);
BN_bn2hex(rnd);
}
答案 0 :(得分:0)
你的代码中有未初始化的指针!他们最有可能指向无效的内存,你无法写入,导致分段错误。
关注的变量是p
和rnd
:
long *p; // p is not initialized, pointing to invalid memory
*p = 67563; // Writing to invalid memory => SEGFAULT
请改为尝试:
int i;
void *buf;
long p; // NO POINTER!
p=67563;
buf=&p; // Let buf point to where p is (valid address on stack)
RAND_seed(buf,9);
BIGNUM rnd; // NO POINTER!
i= BN_rand( &rnd, 128,0,0); // Pass pointer to rnd to BN_rand
BN_bn2hex(&rnd); // Pass pointer to rnd to BN_bn2hex