西電網(wǎng)絡(luò)安全實驗_第1頁
西電網(wǎng)絡(luò)安全實驗_第2頁
西電網(wǎng)絡(luò)安全實驗_第3頁
西電網(wǎng)絡(luò)安全實驗_第4頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算機與網(wǎng)絡(luò)安全課程實驗2016 年月 6 月實驗一DES 加解密算法的實現(xiàn)一、實驗?zāi)康募叭蝿?wù):掌握 DES 加密算法的加解密過程。二、實驗環(huán)境VC 或 TC 編程環(huán)境;主機操作系統(tǒng)為Windows2000 或 Windows XP;三、 實驗原理要深入理解對稱加密算法,掌握 DES 加密過程。具備一定的 C 語言編程技能。DES( Data DES( Data Encryption Standard)算法,于1977 年得到美國政府的正式許可,是一種用56 位密鑰來加密 64 位數(shù)據(jù)的方法。 DES算法以被應(yīng)用于許多需要安全加密的場合。( 一) 、密鑰生成1、變換密鑰取得 64 位的密鑰,每

2、個第8 位作為奇偶校驗位。2、變換密鑰 。(1) 、舍棄 64 位密鑰中的奇偶校驗位,根據(jù)下表( PC-1)進(jìn)行密鑰變換得到 56 位的密鑰,在變換中,奇偶校驗位以被舍棄。(2)、將變換后的密鑰分為兩個部分,開始的28 位稱為 C0 ,最后的 28位稱為 D0 。(3)生成 16 個子密鑰,初始 I=1 。(i) 、同時將 CI 、DI 左移 1 位或 2 位,根據(jù) I 值決定左移的位數(shù)。(ii) 、將 CIDI 作為一個整體按下表 (PC-2)變換,得到 48 位的 KI(iii) 、從 1-2-3-1 處循環(huán)執(zhí)行,直到 K16 被計算完成。( 二 ) 、處理 64 位的數(shù)據(jù)1、取得 64

3、位的數(shù)據(jù),如果數(shù)據(jù)長度不足64 位,應(yīng)該將其擴展為64 位(例如補零)2、將 64 位數(shù)據(jù)按下表變換( IP )3、將變換后的數(shù)據(jù)分為兩部分,開始的32 位稱為 L0 ,最后的 32 位稱為 R0 。4、用 16 個子密鑰加密數(shù)據(jù),初始I=1 。(1) 、將 32 位的 RI-1 按下表( E)擴展為 48 位的 EI-1(2) 、異或 EI-1 和 KI ,即 EI-1 XOR KI(3) 、將異或后的結(jié)果分為 8 個 6 位長的部分,第 1 位到第 6 位稱為 B1 ,第 7 位到第 12 位稱為 B2 ,依此類推,第 43 位到第 48 位稱為 B8 。(4) 、按 S 表變換所有的 B

4、J ,初始 J=1。所有在 S 表的值都被當(dāng)作 4 位長度處理。(i) 將 BJ 的第 1 位和第 6 位組合為一個 2 位長度的變量 M,M作為在 SJ 中的行號。(ii) 、將 BJ 的第 2 位到第 5 位組合,作為一個 4 位長度的變量 N,N 作為在 SJ 中的列號。(iii) 、用 SJMN 來取代 BJ 。(iv) 、從 (i) 處循環(huán)執(zhí)行,直到 B8 被替代完成。(5) 、將 B1 到 B8 組合,按下表( P)變換,得到 P。(6) 、異或 P 和 LI-1結(jié)果放在 RI ,即 RI=P XOR LI-1。(7) 、LI=RI-1(8) 、從 2-4-1 處開始循環(huán)執(zhí)行,直到

5、 K16 被變換完成。5、組合變換后的 R16L16 (注意:R作為開始的 32 位),按下表(IP-1 )變換得到最后的結(jié)果。四、 實驗步驟利用編程語言實現(xiàn)DES 加解密算法。1、編程2、調(diào)試3、運行結(jié)果4、存盤五、實驗結(jié)果加密:Key: 0x30 0x30 0x30 0x30.0x30( 8 個字節(jié))Data: 0x31 0x31 0x31 0x31.0x31(8 個字節(jié))Mode: Encryption結(jié)果: 65 5e a6 28 cf 62 58 5f解密:Key: 0x31 0x31.0x31 ( 8 個 0x31)Data: 65 5e a6 28 cf 62 58 5fMode

6、: Decryption結(jié)果: 0x31 0x31.0x31 ( 8 個 0x31)六、實驗思考題DES 算法主要有哪幾部分?可以畫出流程64 位明文64 位密鑰初始置換置換選擇16 輪加密置換選擇循環(huán)左移32 位互換逆初始置換一輪迭代過程:32位32位擴展 /置換XOR代替 /選擇置換32位32位七、 DES 源程序#include "memory.h"#include "stdio.h"#include <iostream>using namespace std;28位28位左移左移置換 /壓縮C1D1enum encrypt,decry

7、pt;/ENCRYPT: 加密, DECRYPT :解密 void des_run(int out8,int in8,bool type=encrypt);/ 設(shè)置密鑰void des_setkey(const int key8);static void f_func(bool in32,const bool ki48);/fstatic void s_func(bool out32,const bool in48);/s/ 變換函數(shù)盒代替static void transform(bool *out, bool *in, const int *table, int len); static

8、void trans(bool *out, bool *in);static void XOR(bool *ina, const bool *inb, int len);/異或static void rotatel(bool *in, int len, int loop);/循環(huán)左移static void bytetobit1(bool *out,const int *in, int bits);/ 位組轉(zhuǎn)換成字節(jié)組static void bittobyte1(int *out, const bool *in, int bits);static void bytetobit(bool *out

9、,const int *in,int bits);/ 置換 IP表const static int ip_table64=58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,2 3,15,7;/ 逆置換 IP-1 表conststaticintipr_table64=40,8,48,16,56,24,

10、64,32,39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25;/E 位選擇表staticconstinte_table48=32,1,2,3,4,5,4,5,6,7,8,9,8,9,10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26

11、,27,28,29,28,29,30,31,32,1;/P 換位表const static int p_table32=16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,2,8,24,14,32,27,3,9,19,13,30,6,22,11, 4,25;/pc1 選位表const static int pc1_table56=57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,

12、30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4;/pc2 選位表const static int pc2_table48=14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32;/ 左移位數(shù)表const static int loop_table16=1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1; /S 盒const st

13、atic int s_box8416=/s114, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13,/s215, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,3, 13, 4,

14、7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9,/s310, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5,

15、 10, 14, 7,1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12,/s47, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14,/s52, 12, 4, 1, 7, 10

16、, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3,/s612, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3,

17、 8,9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13,/s74, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,6, 11, 13, 8, 1, 4, 10, 7, 9,

18、 5, 0, 15, 14, 2, 3, 12,/s813, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11;static bool subkey1648;/16圈子密鑰void des_run(int out8,int in8,

19、bool type)/for(int i=0;i<8;i+)/printf("%d ",ini);/printf("n");static bool m64,tmp32,*li=&m0, *ri=&m32;bytetobit1(m,in,64);transform(m,m,ip_table,64);/*for(int i=0;i<8;i+)for(int j=0;j<8;j+)cout<<mi*8+j;cout<<endl;cout<<endl;*/if(type=encrypt)for

20、(int i=0;i<16;i+)memcpy(tmp,ri,32);f_func(ri,subkeyi);XOR(ri,li,32);memcpy(li,tmp,32);trans(m,m);elsetrans(m,m);for(int i=15;i>=0;i-)memcpy(tmp,li,32);f_func(li,subkeyi);XOR(li,ri,32);memcpy(ri,tmp,32);/*for(int i=0;i<8;i+)for(int j=0;j<8;j+)cout<<mi*8+j;cout<<endl;cout<&l

21、t;endl;*/transform(m,m,ipr_table,64);bittobyte1(out,m,64);void des_setkey(const int key8)static bool k64, *kl=&k0, *kr=&k28;bytetobit1(k,key,64);transform(k,k,pc1_table,56);for(int i=0;i<16;i+)rotatel(kl,28,loop_tablei);rotatel(kr,28,loop_tablei);transform(subkeyi,k,pc2_table,48);void f_f

22、unc(bool in32,const bool ki48)static bool mr48;transform(mr,in,e_table,48);XOR(mr,ki,48);s_func(in,mr);transform(in,in,p_table,32);void s_func(bool out32,const bool in48)for(int i=0,j,k;i<8;i+,in+=6,out+=4)j=(in0<<1)+in5;k=(in1<<3)+(in2<<2)+(in3<<1)+in4;bytetobit(out,&

23、s_boxijk,4);void transform(bool *out,bool *in,const int *table,int len)static bool tmp256;for(int i=0;i<len;i+)tmpi=intablei-1;memcpy(out,tmp,len);void trans(bool *out, bool *in)bool temp32;memcpy(temp,in,32);memcpy(out,in+32,32);memcpy(out+32,temp,32);void XOR(bool *ina,const bool *inb,int len)f

24、or(int i=0;i<len;i+)inai=inbi;void rotatel(bool *in,int len,int loop)static bool tmp256;memcpy(tmp,in,loop);memcpy(in,in+loop,len-loop);memcpy(in+len-loop,tmp,loop);void bytetobit(bool *out,const int *in,int bits)for(int i=0;i<bits;i+)outi=(ini/8>>(3-i%8) &1;void bytetobit1(bool *out

25、,const int *in,int bits)for(int i=0;i<bits;i+)outi=(ini/8>>(7-i%8) &1;void bittobyte1(int *out,const bool *in,int bits)memset(out,0,8*sizeof(int);for(int i=0;i<bits;i+)outi/8|=ini<<(7-i%8);int main()int key8,str8;int i;puts("please input your words");for(i=0;i<8;i+

26、)cin>>hex>>stri;puts("please input your key");for(i=0;i<8;i+)cin>>hex>>keyi;printf("n");des_setkey(key);des_run(str,str,encrypt);puts("after encrypting:");for(i=0;i<8;i+)cout<<hex<<stri<<" "printf("n");

27、puts("after decrypting:");des_run(str,str,decrypt);for(i=0;i<8;i+)cout<<hex<<stri<<" "printf("n");return 0;實驗二RSA 加解密算法的實現(xiàn)一、實驗?zāi)康募叭蝿?wù):掌握 RSA 加密算法的加解密過程。二、實驗環(huán)境VC 或 TC 編程環(huán)境;主機操作系統(tǒng)為Windows2000 或 Windows XP;三、 實驗原理RSA 加密算法是一種非對稱加密算法。在公鑰加密標(biāo)準(zhǔn)和電子商業(yè)中 RSA 被廣泛使

28、用。 RSA 是 1977 年由羅納德·李維斯特( Ron Rivest)、阿迪·薩莫爾、( Adi Shamir )和倫納德·阿德曼( Leonard Adleman)一起提出的。當(dāng)時他們?nèi)硕荚诼槭±砉W(xué)院工作。 RSA 就是他們?nèi)诵帐祥_頭字母拼在一起組成的。RSA 算法的可靠性基于分解極大的整數(shù)是很困難的。假如有人找到一種很快的分解因子的算法的話, 那么用 RSA 加密的信息的可靠性就肯定會極度下降。但找到這樣的算法的可能性是非常小的。今天只有短的 RSA 鑰匙才可能被強力方式解破。到 2008 年為止,世界上還沒有任何可靠的攻擊 RSA 算法的方式。只要

29、其鑰匙的長度足夠長,用 RSA 加密的信息實際上是不能被解破的。1、公鑰和私鑰的產(chǎn)生假設(shè) Alice 想要通過一個不可靠的媒體接收 Bob 的一條私人訊息。 她可以用以下的方式來產(chǎn)生一個公鑰和一個密鑰:隨意選擇兩個大的質(zhì)數(shù) p 和 q,p 不等于 q,計算 N=pq。根據(jù)歐拉函數(shù) ,不大于 N 且與 N 互質(zhì)的整數(shù)個數(shù)為 (p-1)(q-1) 選擇一個整數(shù) e 與(p-1)(q-1) 互質(zhì) ,并且 e 小于 (p-1)(q-1)用以下這個公式計算d:d× e 1 (mod (p-1)(q-1)將 p 和 q 的記錄銷毀。e 是公鑰, d 是私鑰。 d 是秘密的,而 N 是公眾都知道的

30、。 Alice 將她的公鑰傳給 Bob,而將她的私鑰藏起來。2、加密消息假設(shè) Bob 想給 Alice 送一個消息 m,他知道 Alice 產(chǎn)生的 N 和 e。他使用起先與 Alice 約好的格式將 m 轉(zhuǎn)換為一個小于 N 的整數(shù) n,比如他可以將每一個字轉(zhuǎn)換為這個字的 Unicode 碼,然后將這些數(shù)字連在一起組成一個數(shù)字。 假如他的信息非常長的話,他可以將這個信息分為幾段,然后將每一段轉(zhuǎn)換為 n。用下面這個公式他可以將 n 加密為 c:計算 c 并不復(fù)雜。 Bob 算出 c 后就可以將它傳遞給Alice 。3、解密消息Alice 得到 Bob 的消息 c 后就可以利用她的密鑰個公式來將 c

31、 轉(zhuǎn)換為 n:得到 n 后,她可以將原來的信息m 重新復(fù)原。解碼的原理是d 來解碼。她可以用以下這以及 ed 1 (mod p-1)和 ed 1 (mod q-1)。費馬小定理證明和這說明(因為 p 和 q 是不同的質(zhì)數(shù))四、 實驗步驟1、求素數(shù) p 和 q2、求公鑰( e,n):e 與 (n) = (p 1)(q 1)互質(zhì)3、求私鑰( d,n):d× e 1 (mod (p-1)(q-1)e4、加密過程: c=(M )mod n5、解密過程 : m=(C d)mod n五、實驗結(jié)果找兩個素數(shù): p=47 q=59n=p*q=2773 ,t=(p-1)*(q-1)=2668尋找 e

32、滿足 e<t 并且 e 和 t 互素 ,找到 e=63 ,尋找 d 使 e*d%t =1 得到 d=8471:加密 m 465 ,得 C= 11182:解密 C=1118, 得 m=465六、思考題RSA 算法主要有哪幾部分?1、 輸入 p 和 q,并求出公鑰(e,n):e 與 (n) = (p 1)(q 1)互質(zhì), 再求出 私鑰( d,n):d× e 1 (mod (p-1)(q-1)。2、加密過程: c=(M e)mod nd3、解密過程 : m=(C )mod n七、 RSA 源程序#include <iostream>#include <string.

33、h>#include <time.h>#include <stdlib.h>using namespace std;long long gcd(long long a, long long b)while(a!=b)if(a>b)a=a-b;elseb=b-a;return a;long long Euclid (long long d,long long f)long long x1=1,x2=0,x3=f;long long y1=0,y2=1,y3=d;long long t1,t2,t3;long long q;while(y3!=0)if(y3=1

34、)break;q=x3/y3;t1=x1-q*y1;t2=x2-q*y2;t3=x3-q*y3;x1=y1;x2=y2;x3=y3;y1=t1;y2=t2;y3=t3;if(y3=1)return y2;elsereturn 0;long long pow(long long a,long long b,long long c)long long i;long longk=1;for(i=0;i<b;i+)k=(k%c)*a)%c;return k;int main()long long e,t,p,q,d,n,a,b;long long z100;int k=0,random;cout

35、<<"Please input P&Q:"<<endl;cin>>p>>q;memset(z,0,100*sizeof(long long);t=(p-1)*(q-1);n=p*q;for(e=3;e<t;e+=2)if(gcd(e,t)=1)d=Euclid(e,t);if(d!=0&&d>0&&k<100)zk=e;k+;if(t>400000000)if(k=10)break;else if(k=100)break;srand(unsigned)time(0

36、);random=rand()%k;e=zrandom;d=Euclid(e,t);cout<<"e:"<<e<<endl;cout<<"d:"<<d<<endl;cout<<"Please input a number"<<endl;cin>>a;b=pow(a,e,n);cout<<"Encrypt:"<<b<<endl;b=pow(b,d,n);cout<<

37、;"Decrypt:"<<b<<endl;實驗三認(rèn)證系統(tǒng)的設(shè)計與實現(xiàn)一、實驗?zāi)康募叭蝿?wù)1、掌握關(guān)系數(shù)據(jù)庫系統(tǒng)的基礎(chǔ)知識和基本原理。2、掌握一種關(guān)系數(shù)據(jù)庫管理系統(tǒng),如: SQL Server、 Access3、掌握一種軟件開發(fā)工具,如VC 或 VB4、掌握計算機網(wǎng)絡(luò)基礎(chǔ)知識及網(wǎng)絡(luò)數(shù)據(jù)傳輸協(xié)議:TCP/IP5、能應(yīng)用 VC 或 VB 等開發(fā)工具進(jìn)行Windows Socket 編寫程序6、掌握一種對稱加密算法原理,如:DES,用此算法對數(shù)據(jù)進(jìn)行加解密,并能編寫程序?qū)崿F(xiàn)7、掌握一種非對稱加密算法原理,如:RSA ,用此算法對數(shù)據(jù)進(jìn)行加解密,并能編程程序?qū)崿F(xiàn)

38、8、掌握客戶 /服務(wù)器模式的工作原理9、編程實現(xiàn)認(rèn)證系統(tǒng),調(diào)試所編程序10、觀察程序運行結(jié)果二、實驗環(huán)境1、客戶機(普通 PC 機,安裝 VC 或 VB 等開發(fā)工具)1 臺2、服務(wù)器(普通 PC 機,安裝 VC 或 VB 等開發(fā)工具,關(guān)系數(shù)據(jù)庫管理系統(tǒng)SQL Server)1 臺三、實驗原理隨著 Internet 的飛速發(fā)展,網(wǎng)絡(luò)安全的地位日益突出。網(wǎng)絡(luò)的安全措施應(yīng)是能全方位地針對各種不同的威脅,這樣才能確保網(wǎng)絡(luò)信息的保密性、完整性和可用性。作為安全服務(wù)中的一種- 實體認(rèn)證尤為重要。在一個公開的分布式網(wǎng)絡(luò)環(huán)境中, 工作站上的用戶希望訪問分布在網(wǎng)絡(luò)上的服務(wù)器資源。但網(wǎng)絡(luò)上的資源僅允許授權(quán)用戶的特

39、定權(quán)限的訪問,因此, 在分布式網(wǎng)絡(luò)中,必須提供一種機制來對用戶的身份進(jìn)行認(rèn)證?,F(xiàn)在常用的一些認(rèn)證協(xié)議是為 TCP/IP 網(wǎng)絡(luò)設(shè)計的基于 Client/Server 模式的三方驗證協(xié)議,廣泛應(yīng)用于 Internet 服務(wù)的訪問,網(wǎng)絡(luò)中的認(rèn)證協(xié)議服務(wù)起著可信仲裁者的作用。認(rèn)證協(xié)議基于對稱密碼體制或非對稱密碼體制 , 可提供安全的客體認(rèn)證。用戶在客戶機上登錄,在登錄界面上,輸入用戶名User 和密碼 Password,用戶名以正常字符顯示, 密碼以星號顯示, 為了防止密碼在網(wǎng)上傳輸被竊聽者獲取,用戶輸入的密碼在客戶機上加密 Ek(Password),所以在網(wǎng)上傳輸?shù)氖墙?jīng)過加密的用戶密碼 Ek(Pas

40、sword)。由于偷聽者不知密鑰 K ,所以即使都到信息 Ek(Password),也得不到用戶的密碼 Password服務(wù)器接收客戶機傳輸過來的信息, 提取用戶名 User 密文 Ek(Password),在服務(wù)器端對密文解密, Dk(Ek(Password)))= Password,得到用戶的密碼 Password。管理員在服務(wù)器數(shù)據(jù)庫中, 讀出庫中存貯的用戶名與密碼, 與接收來的用戶名與密碼相比較,如果相等,則為合法用戶,如果不相等,則為非法用戶。流程圖如下:(1)基于對稱密碼體制客戶機端網(wǎng)絡(luò)傳輸服務(wù)器端PasswordPasswordEDKEK (Password)K(a) 常規(guī)加密:

41、保密和鑒別(2) 客戶機端網(wǎng)絡(luò)傳輸PasswordPasswordEDKU bEKUb (Passwor)KR b(b) 公開密鑰加密:保密性此實驗只是認(rèn)識協(xié)議的簡單模擬, 實際應(yīng)用的網(wǎng)絡(luò)安全認(rèn)證協(xié)議比此復(fù)雜的多,特此說明??梢赃M(jìn)一步分析該協(xié)議所存在的問題,提出改進(jìn)方法,并實現(xiàn)。四、實驗步驟客戶機端:(一):編寫程序,實現(xiàn)用戶登錄界面。(二):編寫程序,實現(xiàn)對用戶密碼的加密1:選用對稱密碼算法,如DES假定明文 m 和密鑰 k 都是 64 比特的 0,1 符號串。設(shè)m=m1m2m64k=k1 k2k64mi ,ki =0 或 1, i=1,2, ,64-1加密過程表達(dá)如下: DES(m)=IP

42、 ·T16·T15·T2·T1· IP(m)2:選用非對稱密碼算法,如RSA使用 RSA 有三個階段 。(1)、 RSA階段 1:確定公鑰和私鑰1)選擇兩個大素數(shù), P和Q。2)計算N = P * Q。3)計算 f(n) = (P - 1)(Q 1)。4)選擇 e,其中1 < e < n-1 且 GCD (e, f(n) = 1。5)計算 d,其中 ed = 1 mod f(n)(使用擴展的歐幾里德算法)6) (e,n)作為公鑰, (d,n)作為私鑰。(2)、 RSA階段 2:加密信息為了使用 RSA加密消息 M ,你必須進(jìn)行下列加

43、密運算: C=M emod n,其中 C 是你的密文 ,發(fā)送C。(3)、 RSA階段 3:解密信息為了使用 RSA解密密文 C,你必須進(jìn)行下列解密運算為: M=C dmod n ,其中 M 是你的原始明文。(三):編寫客戶端網(wǎng)絡(luò)傳輸程序?qū)崿F(xiàn)數(shù)據(jù)包的傳輸:Windows Socket 編程。服務(wù)器端(一):管理員在服務(wù)器端建立數(shù)據(jù)庫,存貯用戶的用戶名 User 和密碼 Password,現(xiàn)實中用戶都是現(xiàn)場輸入。(二) 編寫程序,實現(xiàn)對用戶密碼的加密(三)編寫程序,從數(shù)據(jù)庫從讀出用戶名User 和密碼 Password(四)比較用戶輸入的密碼與數(shù)據(jù)庫中存貯的密碼是否相等, 如相等,是合法用戶,不相

44、等,為非法用戶。(五)編寫程序,實現(xiàn)對用戶密碼的加密編寫界面程序。以上所有操作均在界面下操作五、實驗結(jié)果:合法用戶通過驗證,系統(tǒng)提供服務(wù),不合法用戶系統(tǒng)拒絕提供所要求的服務(wù)六、實驗思考題服務(wù)器數(shù)據(jù)庫存貯的是用戶的口令, 如果攻擊者攻擊了服務(wù)器的數(shù)據(jù)庫系統(tǒng),獲取了用戶的口令 Password, 則攻擊此認(rèn)證協(xié)議成功,有無改進(jìn)辦法?可以在數(shù)據(jù)庫中進(jìn)行密文存儲,這樣即使數(shù)據(jù)庫被攻破,攻擊者拿到的是加密的數(shù)據(jù)還需要進(jìn)一步破解。七、源程序#include"mainwindow.h"#include"ui_mainwindow.h"MainWindow:MainWi

45、ndow( QWidget *parent):QMainWindow(parent),ui ( new Ui : MainWindow)ui ->setupUi( this );ui -> lineEdit->setEchoMode( QLineEdit : Password);sender = new QUdpSocket( this );receiver = new QUdpSocket( this ); receiver ->bind( QHostAddress: LocalHost , 5930); connect( receiver , SIGNAL(read

46、yRead(), this ,SLOT(readPendingDatagrams();MainWindow: MainWindow()deleteui ;intMainWindow:pow( inta,intb,intn)inti,temp= 1;for (i= 0;i<b;i+)temp = (temp*a)%n;returntemp;QStringMainWindow:key(QStringstr)QByteArray temp;intn 16;inti,e= 41,N = 133;temp = str.toLatin1();char *name = temp.data(),numQ

47、Stringq;4;for (i= 0;i<str.length();i+)ni= namei;ni= MainWindow:pow(ni,e,N);itoa(ni,num,10);if (ni<10)num2= num0;num1= '0' ;num0= '0' ;elseif (ni<100)num2= num1;num1= num0;num0= '0' ;num4= '0'QStringp = QString ( QLatin1String(num);q += p;free(name);returnq;QS

48、tringMainWindow:unkey( QStringstr)QByteArray temp;intn 16;inti,j,d= 2837,N = 133;temp= str.toLatin1();char*name = temp.data(),num 4,*pname;pname = ( char*)malloc(str.length()/3+1)* sizeof ( char );for (i= 0,j=0;i<str.length();j+,i+)num0= namei+;num1= namei+;num2= namei;num3='0' ;nj=atoi(num);nj=MainWindow:pow(nj,d,N);pnamej= nj;pnamestr.length()/3= '0'QStringq = QString ( QLatin1String(pname);free(name);free(pname);returnq;voidMainWindow:readPendingDatagrams()int flag = 0; while ( receiver ->hasPendingDatagrams()if(flag= 0)QByteArray datagr

溫馨提示

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

評論

0/150

提交評論