线性同余算法

   线性同余发生器(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 =(AX3n-1 +bX2n-1 +cXn-1 +d) mod m

 

 在C的标准库里,也存在一个产生伪随机的函数:rand().但是需要先设置种子,设置种子使用的是函数srand(unsigned int seed)。在WINDOWS环境下,seed值通常取的是(int)time(NULL)或者GetTickCount()。

 

 

参考:《应用密码学协议、算法与C源程序》

你可能感兴趣的:(线性同余算法)