隨機(jī)數(shù)實(shí)驗(yàn)報(bào)告_第1頁(yè)
隨機(jī)數(shù)實(shí)驗(yàn)報(bào)告_第2頁(yè)
隨機(jī)數(shù)實(shí)驗(yàn)報(bào)告_第3頁(yè)
隨機(jī)數(shù)實(shí)驗(yàn)報(bào)告_第4頁(yè)
隨機(jī)數(shù)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、云南大學(xué)軟件學(xué)院實(shí) 驗(yàn) 報(bào) 告姓名: 學(xué)號(hào): 班級(jí): 信息安全 日期: 成績(jī): 課程名稱 信息安全技術(shù)   實(shí)驗(yàn)項(xiàng)目隨機(jī)數(shù)產(chǎn)生實(shí)驗(yàn)?zāi)康?利用密碼技術(shù)或者專門的隨機(jī)數(shù)產(chǎn)生算法產(chǎn)生隨機(jī)數(shù),并對(duì)產(chǎn)生的隨機(jī)數(shù)進(jìn)行統(tǒng)計(jì)分析實(shí)驗(yàn)內(nèi)容(算法、程序、步驟和方法)1) 設(shè)計(jì)一種隨機(jī)數(shù)算法利用上學(xué)期在密碼技術(shù)中學(xué)到的RC4加密算法來(lái)實(shí)現(xiàn)此次隨機(jī)數(shù)生成,此次實(shí)驗(yàn)主要用到的是RC4密鑰流的產(chǎn)生過(guò)程。RC4每次生成一個(gè)0-255(8bit)的數(shù)字,本次統(tǒng)計(jì)隨機(jī)數(shù)是將這個(gè)8bit的數(shù)字,分為兩個(gè)4bit(0-15)的隨機(jī)數(shù)來(lái)統(tǒng)計(jì),統(tǒng)計(jì)的隨機(jī)數(shù)的范圍是從0-15。2) 實(shí)現(xiàn)該隨機(jī)數(shù)算法主要是利用RC4算法,該算法

2、的原理和核心代碼將在下面詳細(xì)闡述:初始化S:開(kāi)始時(shí),S中元素的值被置為按升序從0-255(unsigned char型),即S【0】=0,.,S【255】=255。同時(shí)建立一個(gè)臨時(shí)向量T。設(shè)密鑰長(zhǎng)度為keylen字節(jié),講K的值賦給T的前kenlen個(gè)元素,并循環(huán)重復(fù)用K的值賦給T剩下的元素,直至T全部被賦值。具體實(shí)現(xiàn)過(guò)程如下:/-初始化S數(shù)組和T數(shù)組 unchar S256=0;unchar T256=0;for(int i=0;i<256;i+)Si=i;Ti=Ki%keylen;/循環(huán)復(fù)用K 然后用T長(zhǎng)生的S的初始置換,從S【0】到S【255】,對(duì)每個(gè)S【i】,根據(jù)由T【i】確定的方

3、案,將S【i】置換為S【i】中的另一字節(jié),具體實(shí)現(xiàn)如下:/-用T數(shù)組影響S數(shù)組 int j=0;int i;for(i=0;i<256;i+)j=(j+Si+Ti)%256;Swap(&Si,&Sj);向量S一旦完成初始化,輸入密鑰就不再被使用。密鑰流的生成是從S【0】到S【255】,對(duì)每個(gè)S【i】,根據(jù)當(dāng)前S的值,將S【i】與S中的另一個(gè)字節(jié)置換。當(dāng)S【255】完成置換后,操作繼續(xù)重復(fù)從S【0】開(kāi)始:/-隨機(jī)數(shù)的產(chǎn)生 i=0;j=0;int cMAX=0;/用來(lái)保存隨機(jī)序列 for(int n=0;n<MAX;n+)unchar t;/用來(lái)臨時(shí)存儲(chǔ)隨機(jī)數(shù)的下標(biāo) u

4、nchar k;/產(chǎn)生的隨機(jī)序列(一個(gè)字節(jié))如:2f i=(i+1)%256;j=(j+Si)%256;Swap(&Si,&Sj);t=(Si+Sj)%256;k=St; printf("%x",k);/以16機(jī)制形式顯示在屏幕上 cn=k;/將生成的隨機(jī)序列保存到數(shù)組cn中 3) 對(duì)該算法產(chǎn)生的隨機(jī)數(shù)進(jìn)行統(tǒng)計(jì),分析其效果統(tǒng)計(jì)隨機(jī)數(shù)的時(shí)候,一定要注意把生成的一個(gè)unsigned char的數(shù)字當(dāng)成兩個(gè)隨機(jī)數(shù)統(tǒng)計(jì),比如生成的數(shù)字時(shí)6b(16進(jìn)制),就要當(dāng)成6和b兩個(gè)數(shù)字統(tǒng)計(jì)。具體的統(tǒng)計(jì)過(guò)程的核心代碼如下: /-統(tǒng)計(jì)次數(shù)和頻率 int n16;/用來(lái)存儲(chǔ)隨機(jī)數(shù)(

5、0-15)的次數(shù) float f16;/用來(lái)存儲(chǔ)隨機(jī)數(shù)(0-15)的頻率 for(int i=0;i<16;i+)/初始化次數(shù)和頻率 ni=0;fi=0.0;統(tǒng)計(jì)次數(shù)的這一個(gè)模塊非常重要,一定要把生成的數(shù)據(jù)(unsigned char型)的數(shù)據(jù)當(dāng)成兩個(gè)隨機(jī)數(shù)字來(lái)讀,具體過(guò)程如下:for(int i=0;i<MAX;i+)/統(tǒng)計(jì)次數(shù) unchar temp=(unchar)ci;for(int j=0;j<2;j+)/先讀低四位的16進(jìn)制數(shù),再讀高四位的16機(jī)制數(shù) int p=0;p=temp%16;/低四位的16進(jìn)制數(shù),第二次循換就是高四位的16進(jìn)制數(shù) temp=temp/1

6、6;/得到高四位的16機(jī)制數(shù) np+;/對(duì)應(yīng)次數(shù)加1 printf("n");for(int i=0;i<16;i+)/計(jì)算頻率 fi=(float)ni/(MAX*2);/因?yàn)樯傻氖荕AX個(gè)8bit的數(shù)據(jù),換成16進(jìn)制(4bit)/就是2MAX個(gè)16進(jìn)制的數(shù)字了for(int k=0;k<16;k+)printf("%2d出現(xiàn)的次數(shù)為:%2d , ",k,nk);printf("%2d出現(xiàn)的頻率為:%fn",k,fk);最后看看每個(gè)隨機(jī)數(shù)出現(xiàn)了多少次,和隨機(jī)數(shù)出現(xiàn)的次數(shù)在總的數(shù)字里占的比例。看看每個(gè)隨機(jī)數(shù)的次數(shù)和頻率是

7、否大致相等。比較接近就可以證明是隨機(jī)的。下面的數(shù)據(jù)記錄和計(jì)算模塊,將會(huì)對(duì)統(tǒng)計(jì)結(jié)果進(jìn)行詳細(xì)說(shuō)明。數(shù)據(jù)記錄和計(jì)算 當(dāng)從鍵盤輸入“abcd”的初始向量時(shí),產(chǎn)生的2*MAX(即20000)隨機(jī)數(shù)情況如下:0-15的次數(shù)和頻率如下:從上述的統(tǒng)計(jì)結(jié)果可以看書(shū)0-15出現(xiàn)的次數(shù)大致都為1200多,頻率大致都為0.06多,結(jié)果都比較接近。再來(lái)測(cè)一組數(shù)據(jù),從鍵盤輸入“12eh5”的初始向量時(shí),產(chǎn)生的2*MAX(即20000)隨機(jī)數(shù)情況如下:0-15的次數(shù)和頻率如下:從上述的統(tǒng)計(jì)結(jié)果可以看書(shū)0-15出現(xiàn)的次數(shù)大致都為1200多,頻率大致都為0.06多,結(jié)果都比較接近。之后又測(cè)了N多組數(shù)據(jù),每組數(shù)據(jù)的0-15的次數(shù)

8、和頻率都大致相等,這里就不一一展示了。從這N組數(shù)據(jù)的統(tǒng)計(jì)結(jié)果中,可以看出此次生成的這個(gè)20000個(gè)數(shù)字時(shí)隨機(jī)產(chǎn)生的,符合隨機(jī)數(shù)的定義。結(jié) 論(結(jié) 果)1、 本次實(shí)驗(yàn)用以前學(xué)過(guò)的密碼技術(shù)實(shí)驗(yàn)中的RC4算法產(chǎn)生密鑰流的思想來(lái)生成隨機(jī)數(shù)。2、 通過(guò)統(tǒng)計(jì)每個(gè)隨機(jī)數(shù)出現(xiàn)的次數(shù)和頻率來(lái)判斷是否是隨機(jī)序列。3、 觀察出現(xiàn)的次數(shù)和頻率大致相近,可以判斷此次實(shí)驗(yàn)中產(chǎn)生的序列是隨機(jī)序列。源代碼#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 10000 typedef unsigned cha

9、r unchar;/交換函數(shù),用來(lái)交換兩個(gè)變量 void Swap(unchar *a,unchar *b)unchar temp;temp=*a;*a=*b;*b=temp;int main()/-RC4-/ char *K=0x00;char *key;printf("please input key:");scanf("%s",key);K=key;/密鑰數(shù)組,相當(dāng)于種子 int keylen;keylen=strlen(K);/-初始化S數(shù)組和T數(shù)組 unchar S256=0;unchar T256=0;for(int i=0;i<256

10、;i+)Si=i;Ti=Ki%keylen;/循環(huán)復(fù)用K /-用T數(shù)組影響S數(shù)組 int j=0;int i;for(i=0;i<256;i+)j=(j+Si+Ti)%256;Swap(&Si,&Sj);/-隨機(jī)數(shù)的產(chǎn)生 i=0;j=0;int cMAX=0;/用來(lái)保存隨機(jī)序列 for(int n=0;n<MAX;n+)unchar t;/用來(lái)臨時(shí)存儲(chǔ)隨機(jī)數(shù)的下標(biāo) unchar k;/產(chǎn)生的隨機(jī)序列(一個(gè)字節(jié))如:2f i=(i+1)%256;j=(j+Si)%256;Swap(&Si,&Sj);t=(Si+Sj)%256;k=St; printf(

11、"%x",k);/以16機(jī)制形式顯示在屏幕上 cn=k;/將生成的隨機(jī)序列保存到數(shù)組cn中 /-RC4-/-統(tǒng)計(jì)次數(shù)和頻率 int n16;/用來(lái)存儲(chǔ)隨機(jī)數(shù)(0-15)的次數(shù) float f16;/用來(lái)存儲(chǔ)隨機(jī)數(shù)(0-15)的頻率 for(int i=0;i<16;i+)/初始化次數(shù)和頻率 ni=0;fi=0.0;for(int i=0;i<MAX;i+)/統(tǒng)計(jì)次數(shù) unchar temp=(unchar)ci;for(int j=0;j<2;j+)/先讀低四位的16進(jìn)制數(shù),再讀高四位的16機(jī)制數(shù) int p=0;p=temp%16;/低四位的16進(jìn)制數(shù),第二次循換就是高四位的16進(jìn)制數(shù) temp=temp/16;/得到高四位的16機(jī)制數(shù) np+;/對(duì)應(yīng)次數(shù)加1 printf("n");for(int i=0;i<16;i+)/計(jì)算頻率 fi=(float

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論