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; }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。