线性同余算法

   线性同余发生器(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源程序》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值