随机数测试包 NIST 下载安装、简单实用方法 记录
一、NIST、cygwin下载、安装
具体下载安装方法网上博客很多,下面是最近查阅浏览的一些:
(最近做有关此方向的项目,用到的链接会持续更新)
NIST测试包在linux下使用时,不用安装cygwin,在win系统下才需要用到cygwin
https://blog.csdn.net/zhaomengszu/article/details/79384050
下载时候没有选择make模块,或者makefile时候发现不能make,解决方法也在上面这个链接。
https://blog.csdn.net/weixin_39928192/article/details/89256576
https://www.cnblogs.com/lqerio/p/11798459.html
https://blog.csdn.net/qq_40714543/article/details/111170750
一、简单测试案例
记录一下我踩的坑。。。。
NIST测试序列的随机性时,需要读入一个文件,这个文件里放的是待测试序列。
一开始以为里面的序列要用空格隔开,所以用matlab生成随机0、1序列写入txt文件,当序列个数比较少的时候(比如几十个),此时txt文件里面显示正常,全是随机的0和1;但是当我把数据量加大,仅仅超过100个数字,txt文件就全乱码了。。。当时也没弄清为啥,我就试着用手敲进去的方式,在txt文件里随便敲入几个0和1,用空格隔开,然后复制粘贴,同样,个数大到一二百的时候,重新打开这个文件里面又全乱码了…就像下图这样:
上面是我复制粘贴整的,然后关闭这个文件,再次打开就是下图。。。:
当时想着可能是编码问题,于是另存为,改变编码,再次打开还是这样。。发现每次打开编码都自动变成UTF-16 LE。。到现在还不懂为啥,麻烦知道怎么解决的朋友指点一下,哈哈哈哈哈。
今天偶然间看到一个帖子,说数据不需要用空格隔开。。。这样就好弄了,按上述方法无脑复制了1M的0、1序列,主要是想把NIST测试的流程跑通。。数据文件见下图:
(上图,没有空格的话,打开文件编码自动就是UTF-8,有空格就自动是UTF-16 LE…)
然后就可以用NIST对它进行测试了,具体测试方法可见上面的几个博客链接。
如果操作没问题,会到这一步:
第一个箭头指的地方:数据流的个数,这个和之前数据段、待测试序列的长度是有关的。比如第一开始输入 ./assess.exe 1000,代表一个数据段是1000个比特的数据(也就是1000个0、1随机序列),然后此处how many bitstreams我输入6,则代表需要测试的序列长度是6*1000=6000个数据。这个6000一定要小于等于文件里的随机序列长度,如果文件里的序列长度小于6000就会报错。
第二个箭头:由于我的文件里都是ascii形式的0和1,所以选0;至于1-Binary那个字节是对应啥样的数据,没了解。
若一切顺利,测试成功的标志就是上图中蓝色框框。然后就可以到对应路径下分析测试结果了,路径怎么找?看本文开头推荐的几个链接。
若不太顺利。。。最后一步就会报错::
出现红色框子的东西就代表有问题。有好多种情况会导致这个问题。比如输入的序列个数太少、随机性太低、最后一步选择数据格式不对等等,这个要一一排查。
上面说到我复制了1000000的序列,当开始测试时,也报了上图的错误,显然随机性不够,然后尝试用C语言生成了10000个随机01序列(中间不加空格),写入文件,再次测试就可以通过了。
网上说测试序列要大于1000000,看来只要随机性高一点,序列短一些也可以通过测试,但不能太短。