当前位置:   article > 正文

09.openssl编程——随机数_openssl伪随机数

openssl伪随机数
9.1 随机数
随机数是一种无规律的数,但是真正做到完全无规律也比较困难,所有一般将它称为伪随机数。
9.2 openssl随机数数据结构与源码
a.openssl生成随机数的源码位于crypto/rand目录下。openssl维护一个内部随机状态数据(md_rand.c中定义的全局变量state和md),通过对这些内部数据计算摘要来生成随机数
struct rand_meth_st {
int (*seed) (const void *buf, int num);种子函数
int (*bytes) (unsigned char *buf, int num);生成随机数,openssl根据内部维护的随机数状态来生成结果。
void (*cleanup) (void);清楚函数,本函数将内部维护的随机数据清除。
int (*add) (const void *buf, int num, double randomness);
int (*pseudorand) (unsigned char *buf, int num);
int (*status) (void); 查看熵值是否达到预定值,openssl中32字节,如果达到则返回1,否则返回0.
}
b.crypt/rand目录下主要源码有
b1.md_rand.c
它实现了基于摘要的随机数生成
b2.rand_lib.c
该文件中的源码简单调用了rand_meth中的回调函数
b3.rand_win.c rand_unix.c rand_os2.c
这些源码主要提供平台相关的RAND_poll函数实现和其他系统特有函数的实现。
b4.randfile.c
用于从随机文件中加载种子、生成随机数文件以及获取随机文件名。
9.3主要函数
a.int RADN_load_file(const *file, long bytes)
本函数将file指定的随机数文件中的数据读取bytes字节(如果bytes大于1024,则读取1024字节),调用RAND_add进行计算,生成内部随机数
b.RAND_write_file
生成一个随机数文件
c.const char *RADN_file_name(char *file, size_t num)
获取随机数文件名,如果随机数文件长度小于num则返回空,否则返回文件名
d.RAND_poll
用于计算内部随机数,哥哥平台有各自的实现
e.RAND_screen/RAND_event
用于计算内部随机数,他们调用了RAND_seed
f.RADN_seed
用来计算随机数
g.RAND_cleanup
清楚内部随机数
h.RAND_set_rand_method
用来设置rand_meth,当用户实现了自己的随机数生成函数,调用该方法来替换openssl所提供的随机数功能
i.RAND_status
用来查看内部随机数熵值是否已达到预定值,如果未达到,则不应该生成随机数。
j.
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/834106
推荐阅读
相关标签
  

闽ICP备14008679号