09.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.
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值