Diffie-Hellman密鑰交換綜合實(shí)驗(yàn)報(bào)告_第1頁
Diffie-Hellman密鑰交換綜合實(shí)驗(yàn)報(bào)告_第2頁
Diffie-Hellman密鑰交換綜合實(shí)驗(yàn)報(bào)告_第3頁
Diffie-Hellman密鑰交換綜合實(shí)驗(yàn)報(bào)告_第4頁
Diffie-Hellman密鑰交換綜合實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、(網(wǎng)絡(luò)安全方案設(shè)計(jì)基礎(chǔ))實(shí)驗(yàn)報(bào)告 #代碼可運(yùn)行時(shí)間: 2021年 5月 12日 1-2 節(jié) 地點(diǎn):軟件實(shí)驗(yàn)室姓 名班 級(jí)學(xué) 號(hào)指導(dǎo)教師實(shí)驗(yàn)成績小李物聯(lián)網(wǎng)18-1180*實(shí)驗(yàn)名稱Diffie-Hellman密鑰交換算法實(shí)驗(yàn)?zāi)康?、了解和掌握Diffie-Hellman算法原理及過程;2、通過密鑰交換算法實(shí)現(xiàn)對(duì)稱加解密密鑰的保密傳輸;3、能夠編寫代碼實(shí)現(xiàn)Diffie-Hellman算法,并實(shí)現(xiàn)數(shù)據(jù)保密傳輸。實(shí)驗(yàn)內(nèi)容1、編寫Diffie-Hellman程序,協(xié)商出用于收、發(fā)雙方的加、解密密鑰K;2、模擬發(fā)送端A,用協(xié)商出的密鑰K,通過對(duì)稱加密算法(具體算法不限)將文本文件加密;模擬接收端B,用協(xié)商出

2、的密鑰K,對(duì)接收到的密文解密。實(shí)驗(yàn)過程#include #include /*函數(shù)聲明*/void InitSbox(unsigned char sbox); void KeyExpansion(unsigned char key, char *k, int len);void UpsetSbox(unsigned char sbox, unsigned char key);void DataProcess(unsigned char sbox, FILE *fp1, FILE *fp2);void DataEncrypt(char *k, unsigned char *key, unsign

3、ed char *sbox, FILE *fp1, FILE *fp2);void DataDecrypt(char *k1, unsigned char *key, unsigned char *sbox, FILE *fp1, FILE *fp2);int write_file(char name,char data,int size);int read_file(char name,char data,int size);int usera();int userb();int Xa = 3, Xb = 5, Ya, Yb;/*初始化S盒*/void InitSbox(unsigned c

4、har sbox)int i;for( i = 0; i 256; i+) sboxi = i; /*密鑰填充256數(shù)組*/void KeyExpansion(unsigned char key, char *k, int len)int i;if(len = 256)for( i = 0; i 256)for( i = 0; i 256; i+) keyi = ki; /*打亂S盒*/ void UpsetSbox(unsigned char sbox, unsigned char key)int j = 0,i;unsigned char temp;int n;for( i = 0; i

5、256; i+)n = j + (int)sboxi + (int)keyi;j = n % 256;temp = sboxi;sboxi = sboxj;sboxj = temp; /*加解密數(shù)據(jù)*/ void DataProcess(unsigned char sbox, FILE *fp1, FILE *fp2)/0加密,1解密int i=0, j=0,size=0;int temp2,temp1,t;char k,cipherchar,data_Stream100=0 x00;unsigned char temp;char ch = fgetc(fp1);while(ch != EOF

6、)printf(%c,ch);i = (i + 1) % 256; temp2 = j + (int)sboxi;j = temp2 % 256;temp = sboxi;sboxi = sboxj;sboxj = temp; temp1 = (int)sboxi + (int)sboxj; t = temp1 % 256;data_Streamsize+= k = sboxt; cipherchar = ch k;fputc(cipherchar, fp2);ch = fgetc(fp1);write_file(Stream.txt,data_Stream,size); /*加密總函數(shù)*/v

7、oid DataEncrypt(unsigned char *k, unsigned char *key, unsigned char *sbox, FILE *fp1, FILE *fp2) int len = strlen(k); KeyExpansion(key, k, len); InitSbox(sbox); UpsetSbox(sbox, key); printf(n明文為:); DataProcess(sbox, fp1, fp2); fclose(fp1); fclose(fp2); printf(n加密成功,加密內(nèi)容存于“Ciphertext.txt”中nn); /*解密總函

8、數(shù)*/ void DataDecrypt(unsigned char *k1, unsigned char *key, unsigned char *sbox, FILE *fp1, FILE *fp2) int len = strlen(k1); KeyExpansion(key, k1, len); InitSbox(sbox); UpsetSbox(sbox, key);printf(n密文為:); DataProcess(sbox, fp1, fp2); fclose(fp1); fclose(fp2); printf(n解密成功,解密內(nèi)容存于“Plaintext.txt”中!nn);

9、/*文件的寫操作*/int write_file(char name,char data,int size) FILE *file=fopen(name,ab+);if(file=NULL) return 0; fwrite(data,sizeof(char),size,file);/寫入一個(gè)數(shù)組 rewind(file);/移動(dòng)指針到開頭 fclose(file); return 1;/*文件的讀操作*/int read_file(unsigned char name,char data,int size) FILE *file=fopen(name,rb+);if(file=NULL) r

10、eturn 0; rewind(file);/移動(dòng)指針到開頭 fread(data,sizeof(char),size,file);/讀出一個(gè)數(shù)組 fclose(file); return 1;int main(int argc, const char * argv) int q = 11, alpha = 2; unsigned char k1res ; unsigned char k2res ;/*RC4變量*/unsigned char key125=0 x00,key225=0 x00;unsigned char key256 = 0 x00;unsigned char sbox256

11、 = 0 x00;FILE *fp1, *fp2; int flag = 1,i;/*A端操作*/printf(*A端操作*n);printf( q=11, a=2, Xa=3 n); /計(jì)算 Ya Ya = pow(alpha,Xa); Ya = Ya % q; printf(計(jì)算得出:Ya=(a)Xa mod q = %dn,Ya);printf(把Ya發(fā)送給B端.n); /*B端操作*/ printf(*B端操作*n);printf( q=11, a=2, Xb=5 n);/計(jì)算 Yb Yb = pow(alpha,Xb); Yb = Yb % q; printf(計(jì)算得出:Yb=(a)

12、Xb mod q = %dn,Yb);printf(把Yb發(fā)送給A端.nn); /*AB端收到數(shù)據(jù)后解密*/printf(*AB端計(jì)算秘鑰結(jié)果*n); /把Yb給程序A并解出秘鑰 k1res = usera(alpha,q);/把Ya給程序B并解出秘鑰 k2res = userb(alpha,q);key10=k1res;key20=k2res; printf(nA程序收到Y(jié)b后計(jì)算,得到秘鑰Ka:%d,k1res); printf(nB程序收到Y(jié)a后計(jì)算,得到秘鑰Kb:%dn,k1res);/*RC4加密*/*加密*/ printf(n*A端進(jìn)行RC4加密*n); fp1 = fopen(S

13、ource.txt,r); if(fp1 = NULL) printf(打開源文件失敗!n); getchar(); exit(0); fp2 = fopen(Ciphertext.txt,w); if(fp2 = NULL) printf(打開加密后文件失敗!n); getchar(); exit(0); printf(利用Ka加密進(jìn)行加密); DataEncrypt(key1, key, sbox, fp1, fp2); /*解密*/ printf(*B端進(jìn)行RC4解密*n); fp1 = fopen(Ciphertext.txt,r); if(fp1 = NULL) printf(打開加

14、密后文件失敗!n); getchar(); exit(0); fp2 = fopen(Plaintext.txt,w); if(fp2 = NULL) printf(打開解密后文件失敗!n); getchar(); exit(0); /read_file(Key.txt,key2,11); printf(利用Kb加密進(jìn)行解密); DataDecrypt(key2, key, sbox, fp1, fp2);/*/return 0;int usera(alpha,q) int k1 = pow(Yb, Xa); k1 = k1 % q; return k1;int userb(alpha,q) int k2 = pow(Ya, Xb); k2 = k2 % q; return k2;實(shí)驗(yàn)結(jié)果主代碼的運(yùn)行結(jié)果(圖1):圖1存儲(chǔ)明文的文件(圖2):圖2存儲(chǔ)密文的文

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論