日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

伪随机生成器具体实现——线性同余法

發布時間:2024/8/1 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 伪随机生成器具体实现——线性同余法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一?點睛

線性同余法是一種使用很廣泛的偽隨機數生成器算法。然而,它并不能用于密碼技術。

算法介紹如下:

假設我們要生成偽隨機數列為R0、R1、R2...。首先,我們根據偽隨機數的種子,用下列公式計算第一個偽隨機數R0

R0=(A*種子+C)mod?M

在這里,A、C、M都是常量,且A和C需要小于M

接下來,根據R0用相同的公式計算下一個偽隨機數R1

R1=(A*R0+C)mod?M

接下來我們再用同樣的方法,根據當前的偽隨機數Rn來計算下一個偽隨機數R(n+1)

R(n+1)=(A*Rn+C)mod?M

簡而言之,線性同余法就是將當前的偽隨機數值乘以A再加上C,然后將除以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

以此類推,我們可以得到4、5、1、3、2、6、4、5、1、3、2、6...這樣的偽隨機數列。在這里,數列是以4、5、1、3、2、6的順序不斷循環的,因此周期為6。

由于偽隨機數是除以M得到的余數,因此其范圍必定是0~M-1,而且根據A、C、M的值,最終只能生成上述范圍中的一部分值(因此周期會縮短)。例如,當A=6、C=0、M=7,且種子為6時,所得到的偽隨機數列為1、6、1、6、1、6...周期為2。

如果改變A的值,生成的偽隨機數列又將如何變化呢?我們可以發現,如果樣讓周期為6,只有A=3和A=5才能滿足條件。

在線性同余法中,只要謹慎選擇A、C、M的值,就能夠很容易地生成具備隨機性的偽隨機數列。

然而,線性同余法不具備不可預測性,因此不可以將線性同余法用于密碼技術。

很多偽隨機數生成器的庫函數都是采用線性同余法編寫的。例如C語言的庫函數rand,以及Java的java.util.Random類等,都采用了線性同余法。因此這些函數是不能用于密碼技術的。

我們可以很容易地證明線性同余法不具備不可預測性。

假設攻擊者已經A=3、C=0、M=7。這時,攻擊者只要得到所生成的偽隨機數中的任意一個,就可以預測出下一個偽隨機。因為攻擊者只要用得到的偽隨機數R根據下來公式計算就可以了。

(A*R+C)mod?M=(3*R+0)mod7

在這個過程中,攻擊者沒有必要知道種子6.此外,只要重復上述計算過程,就可以預測出之后生成的全部偽隨機數。

總結

以上是生活随笔為你收集整理的伪随机生成器具体实现——线性同余法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。