【正文】
隨機數(shù)產(chǎn)生為 1024 位,即 16組 64位 2進制數(shù),且有最高為(第 1024 位 2進制數(shù))為 1,所以該隨機數(shù)高位在( 16 進制) 10000000 與 FFFFFFFF 之間。 4 大隨機數(shù)產(chǎn)生的機理 流程圖 圖 1 1024 位隨機數(shù)產(chǎn)生原理 圖 偽隨機數(shù)產(chǎn)生器 的 產(chǎn)生過程 : 輸入 : 輸入為兩個 64 比特的偽隨機數(shù) DTi 和 Vi,其中 DTi 表示當(dāng)前的日期和時間 ,每產(chǎn)生一個數(shù) Ri 后, DTi 都更新一次; Vi 是產(chǎn)生第 i 個隨機數(shù)時的種子,其初值可任意設(shè)定,以后每次自動更新。如果所產(chǎn)生的偽隨機數(shù)經(jīng)過各類檢驗,其差異均不顯著,我們即接受其為均勻總體隨機數(shù)的子樣。 5 return a + (b a) * x / (MAX_VAL 1 )。 下面介紹兩種方法。 實現(xiàn) : 1 double _random( void ) 2 { 3 int a。 要求: 使用 VC++平臺,編寫一個能產(chǎn)生 1024 位的隨機數(shù)發(fā)生器,而且隨機數(shù)還要Confidential PagePage 3 of 56 3 12/30/2020 是足夠隨機的,并且還要編制一個檢驗平臺,能在該平臺上檢驗該隨機數(shù)是足夠隨機的 。 隨機數(shù)已經(jīng)在當(dāng)今社會的各個領(lǐng)域中都頻繁使用,特別是在加密技術(shù)中已經(jīng)成了不可缺少的一部分,甚至很多加密技術(shù)的保密程度就取決于隨機數(shù)。 關(guān)鍵字 :隨機數(shù) ; RSA; MD5; 加密技術(shù) ;均勻性檢測 Big Random Number Generator Algorithm Research and Implement Abstract The big random number is used everywhere in modern society especially in the encryption technology. The random number is the key technology of the encryption. This design mainly provides the request random number (1024) for 3rd Generation of mobile munication system. The way to provide the number is discussed in this article, and the Randomness test is discussed too. There are many ways to finish the task which are shown in this paper. We hope these techniques can be useful. Key words: Random number。 ( 2)學(xué)??梢圆捎糜坝 ⒖s印或其他復(fù)制方式保存學(xué)位論文。 [6]( 美 ) Steven John 設(shè)計模式 [M]. 北京 : 中國電力出版社 , 2020。 隨機數(shù)產(chǎn)生器界面簡單,隨機數(shù)足夠隨機并且保證隨機數(shù)范圍滿足 1024 位2進制數(shù)。 for (int i =0。 組合規(guī)律檢測,按隨機數(shù)出現(xiàn)的先后次序,根據(jù)一定的規(guī)律組合,檢驗其組合的觀察值與理值是不否有顯著差異,包括距離檢驗和配套檢驗等。i32。 i++) //Vi+1 自動賦給 Vi { Vi[i] = Result_5[i]。 Step_3()。 } } 函數(shù)名 : Step_5 函數(shù)功能 : 產(chǎn)生隨機數(shù)第 5步 (見圖 1) 輸入 : Result_4,K1,K2(密鑰 ) 輸出 : Result_5[64] 調(diào)用函數(shù) : MyDes::EDE void CCreRndNum::Step_5() {CDES MyDes。 i 64。 i 64。 i 32。 0x01。 //字符串型 int iKey32[32]。 if (maxlen = sizeof(MEMORYSTATUS)) { memcpy(amp。 if (maxlen = sizeof(DWORD)) { memcpy(amp。 maxlen = sizeof(dwRes)。 5 算法實現(xiàn) 函數(shù)名 : get_SystemStatus_W32 函數(shù)功能 : 得到系統(tǒng)狀態(tài) 輸入 : 無 輸出 : 系統(tǒng)狀態(tài)字符串 ,ni:得到的字符串長度 流程圖: 圖 2 得到系統(tǒng)狀態(tài) 的方法示意 圖 buf: 用以保存系統(tǒng)狀態(tài)字符中, maxlen:字符串長度 int CCreRndNum::get_SystemStatus_W32(int maxlen) { int ni = 0。 隨機數(shù)產(chǎn)生為 1024 位,即 16組 64位 2進制數(shù),且有最高為(第 1024 位 2進制數(shù))為 1,所以該隨機數(shù)高位在( 16 進制) 10000000 與 FFFFFFFF 之間。 4 大隨機數(shù)產(chǎn)生的機理 流程圖 圖 1 1024 位隨機數(shù)產(chǎn)生原理圖 偽隨機數(shù) 產(chǎn)生器 的 產(chǎn)生過程 : 輸入 : 輸入為兩個 64 比特的偽隨機數(shù) DTi 和 Vi,其中 DTi 表示當(dāng)前的日期和時間 ,每產(chǎn)生一個數(shù) Ri 后, DTi 都更新一次; Vi 是產(chǎn)生第 i 個隨機數(shù)時的種子,其初值可任意設(shè)定,以后每次自動更新。如果所產(chǎn)生的偽隨機數(shù)經(jīng)過各類檢驗,其差異均不顯著,我們即接受其為均勻總體隨機數(shù)的子樣。 5 return a + (b a) * x / (MAX_VAL 1 )。 下面介紹兩種方法。 實現(xiàn) : 1 double _random( void ) 2 { 3 int a。 要求: 使用 VC++平臺,編寫一個能產(chǎn)生 1024 位的隨機數(shù)發(fā)生器,而且隨機數(shù)還要Confidential PagePage 2 of 56 2 12/30/2020 是足夠隨機的,并且還要編制一個檢驗平臺,能在該平臺上檢驗該隨機數(shù)是足夠隨機的 。 隨機數(shù)已經(jīng)在當(dāng)今社會的各個領(lǐng)域中都頻繁使用,特別是在加密技術(shù)中已經(jīng)成了不可缺少的一部分,甚至很多加密技術(shù)的保密程度就取決于隨機數(shù)。 關(guān)鍵字 :隨機數(shù) ; RSA; MD5; 加密技術(shù) ;均勻性檢測 Big Random Number Generator Algorithm Research and Implement Abstract The big random number is used everywhere in modern society especially in the encryption technology. The random number is the key technology of the encryption. This design mainly provides the request random number (1024) for 3rd Generation of mobile munication system. The way to provide the number is discussed in this article, and the Randomness test is discussed too. There are many ways to finish the task which are shown in this paper. We hope these techniques can be useful. Key words: Random number。 RSA。像 RSA,MD5 需求大量隨機數(shù)的密碼技術(shù)正需求一個好的隨機數(shù)發(fā)生器的產(chǎn)生。 設(shè)計思路:采用 VC++ 1.使用 VC++實現(xiàn)控件的開發(fā)與界面的設(shè)計,盡量使外觀簡單容易實用,輸出結(jié)果方便易看 2.借鑒其他隨機數(shù)產(chǎn)生器的產(chǎn)生方法,參閱 AES, DES中隨機數(shù)的產(chǎn)生方法,借鑒出其中的精華,補上自己的構(gòu) 思與想法盡量使隨機數(shù)不出現(xiàn)重復(fù)。 4 double r。 經(jīng)過一定的計算變行,符合二維的正態(tài)分布的隨機變量的生成可按下面的方法進行: 1) 產(chǎn)生位于 01 區(qū)間上的兩個隨機數(shù) r1 和 r2. 2) 計算 u=2*r11,v=2*r21 及 w=u^2+v^2 3) 若 w1 , 則返回 1) 4) x=u[(lnw)/w]^(1/2) ( 怎么來的別問 ) y=v[(lnw)/w]^(1/2) 如果為 (miu,sigma^2) 正 態(tài)分 布 , 則 按上 述方 法 產(chǎn)生 x 后, x’=miu+sigma*x 由于采用基于乘同余法生成的 01 上的隨機數(shù)的正態(tài)分布隨機數(shù)始終無法能過正態(tài)分布總體均值的假設(shè)檢驗。 6 } 7 double P_Rand( double Lamda ) // 泊松分布 8 { 9 double x = 0 ,b = 1 ,c = exp( Lamda ),u。 需要指出的是,若所產(chǎn)生的偽隨機數(shù)序列通過某種隨機性檢驗,只是說它與隨機數(shù)的性質(zhì)和規(guī)律不矛盾,我們不能扛絕它,并不是說它們已經(jīng)具有隨機數(shù)的性質(zhì)與規(guī)律。 密鑰 : 產(chǎn)生器用了 3 次三重 DES 加密, 3 次加密使用相同的兩個 56 比特的密鑰 K1 和 K2,這兩個密鑰必須保密且不能用作他用。 DES 算法簡介 自 DES 算法 1977 年公諸于世以來,人們一直對 DES 的安全性持懷疑態(tài)度,對密鑰的長度、迭代次數(shù)及 S盒的設(shè)計眾說紛紜。 //保存得到的字符串長度 DWORD dwRes。 } dwRes = GetCurrentThreadId()。buf[ni], amp。buf[ni], amp。 //轉(zhuǎn)換后的整型 Confidential PagePage 10 of 56 10 12/30/2020 sKey32 = CMD5Checksum::GetMD5(buf,sysInfoLen)。 KK2[i] = iKey32[16 + i / 4] (i % 4) amp。 i++) { DTi[31 i] = (char)(( i) amp。 i++) { Vi[i] = rand()%2。 i++) { Result_2[i] = Vi[i] ^ Result_1[i]。 (Result_4, KK1, KK2, Result_5)。 Confidential PagePage 13 of 56 13 12/30/2020 for (i = 0。 } } // end for UINT temp。i++) { while(dwRndNum[i]2147483648) {dwRndNum[i]+=dwRndNum[i]。 游程檢驗,把隨機數(shù)序列按一定的規(guī)則進行分類,分為正負游程檢驗和升降Confidential PagePage 14 of 56 14 12/30/2020 游程檢驗等。i33。由于時間關(guān)系,程序也有一定瑕疵。 [7] 林元烈,梁宗霞 .隨機數(shù)學(xué)引論 [M].北京 : 清華大學(xué)出版社 , 2020。 ( 3)學(xué)??梢詫W(xué)術(shù)交流為目的復(fù)制、贈送和交換學(xué)位論文。 RSA。像 RSA,MD5 需求大量隨機數(shù)的密碼技術(shù)正需求一個好的隨機數(shù)發(fā)生器的產(chǎn)生。 設(shè)計思路:采用 VC++ 1.使用 VC++實現(xiàn)控件的開發(fā)與界面的設(shè)計,盡量使外觀簡單容易實用,輸出結(jié)果方便易看 2.借鑒其他隨機數(shù)產(chǎn)生器的產(chǎn)生方法,參閱 AES, DES中隨機數(shù)的產(chǎn)生方法,借鑒出其中的精華,補上自己的構(gòu)思與想法盡量使隨機數(shù)不出現(xiàn)重復(fù)。 4 double r。 經(jīng)過一定的計算變行,符合二維的正態(tài)分布的隨機變量的生成可按下面的方法進行: 1) 產(chǎn)生位于 01 區(qū)間上的兩個隨機數(shù) r1 和 r2. 2) 計算 u=2*r11,v=2*r21 及 w=u^2+v^2 3) 若 w1 ,則返回 1) 4) x=u[(lnw)/w]^(1/2) ( 怎么來的別問 ) y=v[(lnw)/w]^(1/2) 如果為 (miu,sigma^2) 正態(tài) 分 布 , 則按 上述 方 法產(chǎn) 生 x 后, x’=miu+sigma*x 由于采用基于乘同余法生成的 01 上的隨機數(shù)的正態(tài)分布隨機數(shù)始終無法能過正態(tài)分布總體均值的假設(shè)檢驗。 6 } 7 double P_Rand( double L