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

    你可能感兴趣的文章
    python 判断当前时间是否为零点
    查看>>
    python 利用pandas读取本地中CSV文件的指定列 列名重命名 并保存回本地
    查看>>
    python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS
    查看>>
    python 利用pyttsx3文字转语音
    查看>>
    python 利用已有Ner模型进行数据清洗合并
    查看>>
    python 到大数据开发工程师_如何成为一个大数据开发工程师?
    查看>>
    python 加密解密(base64, AES)
    查看>>
    Python 和Java 哪个更适合做自动化测试?
    查看>>
    python 图片转ico
    查看>>
    python 图片转文字、语音转文字、文字转语音保存音频并朗读
    查看>>
    python 在包含类似字符\x16、\x12、\x某某的数组中将以\x开头的字符找出来的方法
    查看>>
    Python 在并行进程之间共享字典
    查看>>
    Python 垃圾收集器文档
    查看>>
    python 基于 wordcloud + jieba + matplotlib 生成词云
    查看>>
    python 基于detectron或mask_rcnn的mask遮罩区域进行图片截取
    查看>>
    Python 基础 - Day 5 Learning Note - 模块 之 标准库:time (1)
    查看>>
    python 基础第七篇
    查看>>
    Python编程:Tkinter图形界面设计(1)
    查看>>
    Python 基础语法:None
    查看>>
    Python 基础语法:基本数据类型(一)
    查看>>