打开SSL Rand功能

时间:2014-01-10 08:46:59

标签: c++

我对使用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);

}

1 个答案:

答案 0 :(得分:0)

你的代码中有未初始化的指针!他们最有可能指向无效的内存,你无法写入,导致分段错误。

关注的变量是prnd

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