博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
09.openssl编程——随机数
阅读量:2243 次
发布时间:2019-05-09

本文共 1252 字,大约阅读时间需要 4 分钟。

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.

转载地址:http://amwdb.baihongyu.com/

你可能感兴趣的文章
阿里云《云原生》公开课笔记 第四章 理解Pod和容器设计模式
查看>>
阿里云《云原生》公开课笔记 第五章 应用编排与管理
查看>>
阿里云《云原生》公开课笔记 第六章 应用编排与管理:Deployment
查看>>
阿里云《云原生》公开课笔记 第七章 应用编排与管理:Job和DaemonSet
查看>>
阿里云《云原生》公开课笔记 第八章 应用配置管理
查看>>
阿里云《云原生》公开课笔记 第九章 应用存储和持久化数据卷:核心知识
查看>>
linux系统 阿里云源
查看>>
国内外helm源记录
查看>>
牛客网题目1:最大数
查看>>
散落人间知识点记录one
查看>>
Leetcode C++ 随手刷 547.朋友圈
查看>>
手抄笔记:深入理解linux内核-1
查看>>
内存堆与栈
查看>>
Leetcode C++《每日一题》20200621 124.二叉树的最大路径和
查看>>
Leetcode C++《每日一题》20200622 面试题 16.18. 模式匹配
查看>>
Leetcode C++《每日一题》20200625 139. 单词拆分
查看>>
Leetcode C++《每日一题》20200626 338. 比特位计数
查看>>
Leetcode C++ 《拓扑排序-1》20200626 207.课程表
查看>>
Go语言学习Part1:包、变量和函数
查看>>
Go语言学习Part2:流程控制语句:for、if、else、switch 和 defer
查看>>