0x00前言
本系列文章将带来cryptocals 这套密码学挑战的write-up.不同于通过上课或者看书的方式学习密码学,这些题目来自于现在生活中一些软件系统和密码构造中的缺陷。
本系列每一个题的wp基本是采用如下结构:题目解释、相关知识点讲解、代码实现及解释,运行测试。代码均采用python3实现,代码实现部分是参考国外大佬ricpacca的,结合自己的理解及成文需要进行部分修改。
第三套一共有八关。上篇文章我们解决了前四关,接下来我们来解答后四关。
0x01
第21题

题目要求我们实现MT19937,它是Mersenne Twister的一种变体,可以产生32位整数序列
梅森旋转算法(Mersenne twister)是一个伪随机数发生算法。由松本真和西村拓士在1997年开发,基于有限二进制字段上的矩阵线性递归F。可以快速产生高质量的伪随机数,修正了古典随机数发生算法的很多缺陷。
Mersenne Twister这个名字来自周期长度取自梅森素数的这样一个事实。这个算法通常使用两个相近的变体,不同之处在于使用了不同的梅森素数。一个更新的和更常用的是MT19937, 32位字长。还有一个变种是64位版的MT19937-64。对于一个k位的长度,Mersenne Twister会在 [0,2^{k}-1]的区间之间生成离散型均匀分布的随机数。
MT19937的优点包括:
1.周期非常长,达到219937−1。尽管如此长的周期并不必然意味着高质量的伪随机数,但短周期(比如许多旧版本软件包提供的232)确实会带来许多问题。
2. 在1 ≤ k ≤ 623的维度之间都可以均等分布。
3.除了在统计学意义上的不正确的随机数生成器以外,在所有伪随机数生成器法中是最快的(就算法提出时而言)
后面几题都是与随机数相关的题目,所以这里关于随机数再说明一下:
随机数在许多领域中都有着大量

最低0.47元/天 解锁文章
1291

被折叠的 条评论
为什么被折叠?



