线性同余算法

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

评论 2 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

jinling1441

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值