Openssl 随机数生成_Sunspider107的博客-程序员宝宝_openssl生成随机数

技术标签: path  random  file  Openssl参考手册  query  socket  Openssl  windows  

Openssl中生成随机数的函数,定义在rand.h 文件中。

最直接的用法是调用函数:

int  RAND_bytes(unsigned char *buf,int num);

根据加密算法生成随机数,其实也是一个伪随机数,但是,如果在调用此函数之前,设定好随机种子,那么生成的随机数是不能被预先计算出来的。

buf:输出,生产的随机数存储的数组;

num: 输入,生产的随机数个数;

返回值:1 ,成功, 0 失败;


Openssl还提供另外一个随机数生成函数,int RAND_pseudo_bytes(unsigned char *buf, int num); 从函数名称中可以看出,这个生成的是伪随机数,生成的随机数可以预先计算出来。对于数据对随机性要求不高的,可以调用此函数。


void RAND_seed(const void *buf,int num);

随机数生成前设定种子;

buf: 输入, 种子保存的数组;

num: 输入,种子数据长度;


//tbd

void RAND_add(const void *buf,int num,double entropy);

增加随机数生成的不可预知性,将buf数组中num个数据加入PRNG中,entropy是对buf中数据的随机性估计值,如果entropy 和num相等,那么RAND_add函数与Rand_seed函数相同;

buf中的数据,一般采用系统中随机性的事件,比如一些交互性数据,用户敲击的键盘值,鼠标滑过的位置等等。


int RAND_Status();

返回值,如果随机数种子已经满足条件,返回1 ,否则返回0;

int RAND_event(UINT, WPARAM, LPARAM);

RAND_event是为Windows系统设计的函数,手机用户的一些交互性数据,比如鼠标的移动等等;

iMsg, RParam, LParam 这三个参数是Windows在传递消息时所带的三个参数,此函数会评估传递参数的随机性,然后根据判定结果,决定是否加入到PRNG中;

返回值,如果随机数种子已经满足条件,返回1 ,否则返回0;




void RAND_screen(void);

RAND_screen也是为Windows系统设计的函数,将当前屏幕数据加入到PRNG中,在windows系统中,对于应用开发者,最好采用RAND_event函数来收集硬件事件,增加PRNG的随机性,需要注意的是,这两个函数,不能在没有交互性的系统比如服务器中使用。


 const char *RAND_file_name(char *buf, size_t num);
在默认路径下,生成随机数种子文件,
buf: 保存文件名
num: 文件名字符数;
如果$RANDFILE设定,文件名即为$RANDFILE,如果没有设定,那么文件名是$HOME/.rnd
如果$HOME或者num的数字太小,不能容纳文件名,那么函数将返回错误。
返回值,如果成功,返回buf的地址,如果失败,NULL

 int RAND_load_file(const char *filename, long max_bytes);
从随机数种子文件中读取数据,加入到PRNG中;
filename: 随机数种子文件;
max_bytes:可以读取的最大字节数;如果max_bytes 的值是-1,将读取整个文件;
返回值: 读取的数据个数;


 int RAND_write_file(const char *filename);

将随机数写入种子文件,当前是1024个字节,使用者后面可以调用RAND_load_file读取这些随机数;

返回值: 写入的字节数,如果失败,则写入-1;


void RAND_cleanup(void);
清除PRNG的状态;


 int RAND_egd(const char *path);
向取随机数种子的Dameon程序EGD要求种子数据,数据长度为255个字节;
path: EGD的socket路径;
返回值:读取的数据字节数,如果失败,返回-1

 int RAND_egd_bytes(const char *path, int bytes)
向取随机数种子的Dameon程序EGD要求种子数据,数据长度为bytes定义的字节数;
path: EGD的socket路径;
bytes:请求的字节数;
返回值:读取的数据字节数,如果失败,返回-1
 
 int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes);
向取随机数种子的Dameon程序EGD要求种子数据,数据长度为bytes定义的字节数,如果buf不是空,那么数据保存在buf定义的内存中,否则直接加到PRNG中;
path: EGD的socket路径;
bytes:请求的字节数;
返回值:读取的数据字节数,如果失败,返回-1

关于EGD://tbc
系统中如果没有/dev/*random服务,可以通过edg Deamon服务来实现对随机数种子的获取,edg通过socket界面来通信,一次最多可以获取255个字节,一次连接可以获取多次数据;


 



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Sunspider107/article/details/7364770

智能推荐

实习杂记(32):getApplicationInfo或者getPackageManger出错_wust小吴的博客-程序员宝宝_getapplicationinfo

发生这种错误原因第一个是:binder通信getPackageManger  是通过binder通信的,最大通信是1M,而且这个binder通信是系统整个的,也就是当前整个手机APP所有应用同一个时刻,或者同一个时间内 进行通信   超过了IM,就会报:RuntimeException  和  RomatoException      这里大家想的办法是同步,不能一

HYSBZ 2301 Promblem b 莫比乌斯反演+分块_读T恐惧症的博客-程序员宝宝

题意对于给出的 n 个询问,每次求有多少个数对 (x,y) ,满足 a ≤ x ≤ b , c ≤ y ≤ d ,且 gcd(x,y) = k , gcd(x,y) 函数为 x 和 y 的最大公约数。 n, a, b, c, d, k都是1e5思路用容斥原理处理a ≤ x ≤ b , c ≤ y ≤ d的情况,即 bd - ad - bc + ac用之前普通做法的复杂度为1e5,加上1e5次询

nagios 3.X 简单部署及应用_weixin_34376562的博客-程序员宝宝

################################# 欢迎与我交流 ## 作者:守住每一天 ## QQ: 48431359 ## BLOG: liuyu.blog.51cto.com #############################...

压缩解压目录和文件--ICSharpCode.SharpZipLib.dll 算法 (转)_生活真美好的博客-程序员宝宝

ICSharpCode.SharpZipLib.dll 算法,http://leadwit.blog.sohu.com/79945990.html

win10改计算机名后开机有两个用户,win10系统取消开机密码后出现两个账户的解决方法..._weixin_39688856的博客-程序员宝宝

很多小伙伴都遇到过win10系统取消开机密码后出现两个账户的困惑吧,一些朋友看过网上零散的win10系统取消开机密码后出现两个账户的处理方法,并没有完完全全明白win10系统取消开机密码后出现两个账户是如何解决的,今天小编准备了简单的解决办法,只需要按照1、按win+r打开运行,输入netplwiz打开设置菜单; 2、去掉【要使用本计算机,用户必须输入用户名和密码】前面的勾,然后点击【属性】;的..._1671465600

Kali 安装向日葵 依赖关系报错 解决方案_kali显示无法修复依赖关系_刘乙兵的博客-程序员宝宝

Kali 安装向日葵 依赖关系报错 解决方案一 如忽略依赖关系仍报错 无法定位软件包:libappindicator3-1_libappindicator3-1软件包安装失败安装下载libindicator3-7_0.5.0-2_amd64.deblibappindicator3-1_0.4.92-3.1_amd64.deblibindicator3-7:[官网地址: http://ftp.cn.debian.org/debian/pool/main/libi/libindicator/lib

随便推点

deepin 邮件服务器,深度系统 deepin 邮件软件开启公测_嘻嘻哒的小兔子的博客-程序员宝宝

原标题:深度系统 deepin 邮件软件开启公测IT之家 8 月 31 日消息 根据深度系统 deepin 官方的消息,深度邮件软件即将发布,现开展公测活动。 深度邮件公测活动:测试时间· 2020.08.31:开始测试· 2020.08.31——2020.09.09:测试并填写公测问卷· 2020.09.09:结束测试测试流程· 获取深度邮件(打开终端,输入命令:sudo apt update ...

Spring cloud gateway 踩坑实录——端口之坑、配置代理远端WS服务时报404,403之坑_zx4java的博客-程序员宝宝_spring gateway options 403

先贴上解决方案吧,一下简称Spring cloud gateway 为SCGserver: port: 8000spring: cloud: gateway: routes: - id: https uri: https://www.zhaoxu4java.com/-/x/pro/market/overview pr...

Springboot自动装配的原理_springboot自动装配原理_心动的偏执的博客-程序员宝宝

springboot在日常开发中减少了我们许多工作量减少了很多XML配置,这都得益于springboot自动装配的特性。那么springboot是如何实现自动装配的呢 ?首先我们浅显得介绍一些 springboot的一些主要注解:@Configuration 用于声明定义bean 熟悉spring的应该都明白 这也是springboot自动装配关键的注解之一 其实就是平常Spring配置文件中我们写的[email protected] 用来开启springboot自动配置的注解

java面向公司的编程题_JAVA面向对象编程题_鲁森林林的博客-程序员宝宝

1.给我一个字符串,例如I love java,输出: java love Ipublic class StringReverse {public void swap(char[] arr, int begin, int end) {while(begin < end) {char temp = arr[begin];arr[begin] = arr[end];arr[end] = temp...

使用JEECG心得_chouwuwei1341的博客-程序员宝宝

使用jeecg-boot心得: Jeect-boot,采用主流最新的开发技术,是个强大的快速开发平台。 刚开始发现jeecg-boot时便对其精致美观的页面深深的迷住了。下载项目运行发现其中也有想要的按钮权限功能,同时jeecg-boot秉承了以前的一贯作风有强大的代码...

推荐文章

热门文章

相关标签