概述
线性同余发生器(Linear congruential generator)是
Xn =(aXn-1 = b) mod m
形式的伪随机序列发生器,其中Xn 是序列的第n个数,Xn-1 是序列的第n-1个数,变量a,b,m是常数,a是乘数,b是增量,m是模,密匙即种子是初始值X0 。
这种发生器的周期不会超过m。如果a,b和m都是可选的,那么发生器将会是一个最大周期发生器(maximal period generator,有时也叫最大长度),并且周期为m。(例如,b是与m相关的素数。) 在选择常数是需要仔细,以保证能找到最大的周期。
线性同余发生器的优点是:速度快,每位只需要很少的操作。
然而,它不能用在密码学中,因为它们都是可预测的。线性同余发生器首先被Jim Reeds破译,然后被Joan Boyar破译。她还破译了二次同余发生器:
Xn =(aX2 n-1 + bXn -1+c) mod m
和三次同余发生器:
Xn =(AX3 n-1 +bX2 n-1 +cXn-1 +d) mod m
在C的标准库里,也存在一个产生伪随机的函数:rand().但是需要先设置种子,设置种子使用的是函数srand(unsigned int seed)。在WINDOWS环境下,seed值通常取的是(int)time(NULL)或者GetTickCount()。
参考:《应用密码学协议、算法与C源程序》
最后
以上就是醉熏老虎为你收集整理的线性同余算法的全部内容,希望文章能够帮你解决线性同余算法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复