c++如何使用openssl接口来生成随机数
作者:听风的倾诉
c++使用openssl接口来生成随机数
openssl是一个用来进行加密和解密的常用接口
里面也有产生随机数的功能,接下来就来实现一下该功能
产生随机数的代码十分容易
但配置过程十分繁琐,配置过程是后面实现openssl进行加密和解密操作的必不可少的一步
首先应该下载openssl的资源文件,包含include,bin和lib三个文件夹,下载之后,在该三个文件夹的同等目录下创建src文件,在src文件中就可以创建vs项目了,我是使用的vs2019。
如下图所示:

在该位置创建项目:

创建新项目完成后,写出下来下面的代码是完全没有问题的

但是在包含openssl的rand库文件时将会发生错误,提示未能包含进来

这时候需要在属性页将附加包含目录加进来,加进来之后就不会报错了

我们来看一下这个库文件所在的位置:发现是在文件夹include里面,

而当前代码所在的文件夹如下:
所以要…\先去到src文件夹,再…\去到include文件所在的文件夹,然后再include就可以进入到include文件夹中了,即…\include

将其加进来,并且确定,这样以来,文件夹include里面的所有库函数都可以使用了

报错消失

接下来就可以使用openssl中产生随机数的库函数了
unsigned char buf[16] = { 0 };//用来接收产生的随机数
int re = RAND_bytes(buf, sizeof(buf));在这里我们使用
RAND_bytes(unsigned char* buf,int num)
函数来产生随机数,第一个参数用来接收产生的随机数,第二个参数是产生的随机数的数量,返回值是0或1,是1则表示产生随机数成功。
写好代码之后运行发现报错:说刚才使用的函数不可用,现在想起来还有另外两个文件夹未使用

在属性中将将附加库目录和附加依赖项加进来


再次运行后还是报错,提示信息如下:

由于缺少上述文件,我们去找一下该文件,发现在bin文件夹的x86里面(lib文件夹里面是库文件,bin文件夹里面是可执行的二进制文件)

然后在属性里面将输出目录和工作目录修改一下即可:


再次运行,运行成功,产生16个随机数

总体代码很少,如下所示:
#include<iostream>
#include<openssl/rand.h>
using namespace std;
int main(int argc, char* argv[])
{
unsigned char buf[16] = { 0 };//用来接收产生的随机数
int re = RAND_bytes(buf, sizeof(buf));
for (int i = 0;i < sizeof(buf);i++)
cout << (int)buf[i] << " ";
cout << endl;
getchar();
return 0;
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
