博客
关于我
伪随机生成器具体实现——线性同余法
阅读量:177 次
发布时间:2019-02-28

本文共 718 字,大约阅读时间需要 2 分钟。

线性同余法是一种广泛应用的伪随机数生成器算法。然而,它并不能用于密码技术。

算法介绍

线性同余法用于生成伪随机数列,具体步骤如下:

  • 初始化:使用伪随机数的种子,计算第一个伪随机数R0:[R0 = (A \times \text{种子} + C) \mod M]其中,A、C、M为常量,且A和C需小于M。

  • 递推公式:根据当前伪随机数Rn,计算下一个伪随机数R(n+1):[R(n+1) = (A \times Rn + C) \mod M]

  • 实战示例

    以A=3,C=0,M=7,种子为6为例:

    • R0 = (3×6 + 0) mod 7 = 4
    • R1 = (3×4 + 0) mod 7 = 5
    • R2 = (3×5 + 0) mod 7 = 1
    • R3 = (3×1 + 0) mod 7 = 3
    • R4 = (3×3 + 0) mod 7 = 2
    • R5 = (3×2 + 0) mod 7 = 6
    • R6 = (3×6 + 0) mod 7 = 4

    生成的伪随机数列为4、5、1、3、2、6,周期为6。

    周期性分析

    线性同余法的周期性由A和M决定。例如,当A=6,C=0,M=7,种子为6时,伪随机数列为1、6,周期为2。

    只有特定的A值(如3和5)才能使周期为6。

    伪随机数的安全性

    线性同余法不具备不可预测性,因此不可用于密码技术。攻击者已知A、C、M和任意一个伪随机数,均可预测后续数列。

    例如,已知R0=4,下一个数R1 = (3×4 + 0) mod 7 = 5,依此类推。

    总结

    线性同余法易于实现,但其周期性和安全性有限,无法满足密码技术要求。尽管许多编程语言库函数(如C语言的rand)采用线性同余法,但这些函数不适合用于加密。

    转载地址:http://sorj.baihongyu.com/

    你可能感兴趣的文章
    presentModalViewController显示半透明的一个view
    查看>>
    PresentViewController切换界面
    查看>>
    PyTorch之torch.utils.data.DataLoader解读
    查看>>
    PyTorch之DataLoader杂谈
    查看>>
    presto、druid、sparkSQL、kylin的对比分析
    查看>>
    Presto分布式大数据查询引擎
    查看>>
    Presto架构及原理
    查看>>
    Presto(一)集群部署
    查看>>
    Presto(二)开启安全认证
    查看>>
    Pricing procedure Steps and Details in SAP MM (from SCN)
    查看>>
    Prim 算法在不同权重范围内的性能分析及其实现
    查看>>
    Primace 5.0软件与KEIL单片机软件联合在线仿真步骤
    查看>>
    Prime Distance
    查看>>
    Prim求MST最小生成树
    查看>>
    Prim算法与Kruskal算法在均匀分布权重图中的性能比较
    查看>>
    Prim算法在加权连通图中的简单实现
    查看>>
    Prim算法详解及C代码示例
    查看>>
    pytorch中让数组显示更多的数字 torch.set_printoptions参数详解 numpy也是这个函数
    查看>>
    pringBoot Controller接收参数的几种常用方式
    查看>>
    printf()函数
    查看>>