目的
通过python利用Fortuna算法生成伪随机数。
设计思路
编程语言:Python 2.7
运行系统:Ubuntu 18.04
随机源
选取Linux系统下的
/dev/random作为随机源;/dev/random是Linux内核下的设备文件,用于记录环境噪声,常用于生成随机数共设计四个文件,其作用如下
generator.py,用作发生器包含函数如下:
reseed(seed),用于重新生成种子,seed为上一次生成随机数后的种子set_key(key),用于生成新的密钥,kay为旧密钥generate_blocks(n),分组,用于生成AES加密数据块,n为分组数目,返回16n字节的随机字符串pseudo_random_data(n),用于生成随机数据,n为要生成随机数据的字节数,返回n字节随机数据
使用
pyan && Graphviz生成generator.py文件下的函数之间的调用关系如下:
accumulator.py,用作累加器包含函数如下:
random_data(n),用于生成伪随机数,n表示要生成伪随机数的字节数add_random_event(s,i,e),用于加入随机事件,当随机源有另外一个随机事件时,就调用此函数,s表示源编号范围,i表示赤字编号范围,e表示时间数据
使用
pyan && Graphviz生成accumulator.py文件下的函数之间的调用关系如下:
seedcreator.py,用于种子文件管理,生成和更新种子文件包含函数如下:
seed_update(accumulator),用于生成和更新种子文件
使用
pyan && Graphviz生成seedcreator.py文件下的函数之间的调用关系如下:
main.py,调用并整合上述三个文件,构成Fortuna伪随机数生成器包含函数如下:
main(),用做输入输出接口,接收输入的生成的随机数的字节数目,调用其他函数生成并输出随机数;
利用
pycallgraph生成项目的动态调用图如下,符合设计
程序运行结果
程序运行结果如下,输出随机数的字节码,每次程序调用都会重新生成种子文件,实现了Fortuna算法的随机数生成。
