本文共 1252 字,大约阅读时间需要 4 分钟。
随机数是一种无规律的数,但是真正做到完全无规律也比较困难,所有一般将它称为伪随机数。
a.openssl生成随机数的源码位于crypto/rand目录下。openssl维护一个内部随机状态数据(md_rand.c中定义的全局变量state和md),通过对这些内部数据计算摘要来生成随机数
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.
该文件中的源码简单调用了rand_meth中的回调函数
b3.rand_win.c rand_unix.c rand_os2.c
这些源码主要提供平台相关的RAND_poll函数实现和其他系统特有函数的实现。
用于从随机文件中加载种子、生成随机数文件以及获取随机文件名。
a.int RADN_load_file(const *file, long bytes)
本函数将file指定的随机数文件中的数据读取bytes字节(如果bytes大于1024,则读取1024字节),调用RAND_add进行计算,生成内部随机数
c.const char *RADN_file_name(char *file, size_t num)
获取随机数文件名,如果随机数文件长度小于num则返回空,否则返回文件名
用来设置rand_meth,当用户实现了自己的随机数生成函数,调用该方法来替换openssl所提供的随机数功能
用来查看内部随机数熵值是否已达到预定值,如果未达到,则不应该生成随机数。
转载地址:http://amwdb.baihongyu.com/