博客
关于我
伪随机生成器具体实现——线性同余法
阅读量: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/

    你可能感兴趣的文章
    PHP判断指定目录下是否存在文件
    查看>>
    php判断数组是否为空
    查看>>
    PHP判断数组是否有重复值、获取重复值
    查看>>
    springboot基于Web的社区留守儿童管理系统源码毕设+论文
    查看>>
    Springboot基于Redisson实现Redis分布式可重入锁【案例到源码分析】
    查看>>
    PHP利用正则表达式实现手机号码中间4位用星号(*)替换显示
    查看>>
    PHP加密与安全的最佳实践
    查看>>
    PHP加速器eaccelerator导致php-fpm进程卡死原因分析
    查看>>
    PHP区分 企业微信浏览器 | 普通微信浏览器 | 其他浏览器
    查看>>
    php原生代码怎么连表查询,PHP tp5中使用原生sql查询代码实例
    查看>>
    PHP去掉转义符
    查看>>
    php去除字符串开头或末尾的字符(例如逗号)
    查看>>
    php反射api
    查看>>
    PHP反射ReflectionClass、ReflectionMethod 入门教程
    查看>>
    PHP反射机制
    查看>>
    php取当天的最后一秒_Docker快速搭建PHP开发环境详细教程
    查看>>
    php取绝对值
    查看>>
    PHP变量内容的获取
    查看>>
    php各种常用的算法
    查看>>
    php各种缓存策略对比
    查看>>