西電網(wǎng)絡(luò)安全試驗(yàn)_第1頁(yè)
西電網(wǎng)絡(luò)安全試驗(yàn)_第2頁(yè)
西電網(wǎng)絡(luò)安全試驗(yàn)_第3頁(yè)
西電網(wǎng)絡(luò)安全試驗(yàn)_第4頁(yè)
西電網(wǎng)絡(luò)安全試驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩15頁(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、計(jì)算機(jī)與網(wǎng)絡(luò)安全課程實(shí)驗(yàn)2016年月 6 月實(shí)驗(yàn)一 DES 加解密算法的實(shí)現(xiàn)一、實(shí)驗(yàn)?zāi)康募叭蝿?wù):掌握 DES 加密算法的加解密過(guò)程。二、實(shí)驗(yàn)環(huán)境VC或TC編程環(huán)境;主機(jī)操作系統(tǒng)為 Windows2000或 Windows XP;三、實(shí)驗(yàn)原理要深入理解對(duì)稱(chēng)加密算法,掌握 DES加密過(guò)程。具備一定的C語(yǔ)言編程技 能。DES( Data DES( Data Encryption Standard) 算法,于 1977年得到美國(guó)政 府的正式許可,是一種用56位密鑰來(lái)加密64位數(shù)據(jù)的方法。DES算法以被 應(yīng)用于許多需要安全加密的場(chǎng)合。(一) 、密鑰生成1、變換密鑰取得 64位的密鑰,每個(gè)第 8 位作為奇

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

3、將其擴(kuò)展為 64位 (例如補(bǔ)零)2、將 64 位數(shù)據(jù)按下表變換( IP)3、將變換后的數(shù)據(jù)分為兩部分,開(kāi)始的 32位稱(chēng)為 L0 ,最后的 32位稱(chēng) 為 R0 。4、用 16 個(gè)子密鑰加密數(shù)據(jù),初始 I=1 。、將32位的RI-1按下表(E)擴(kuò)展為48位的EI-1、異或 EI-1和 KI,即 EI-1 XOR KI(3) 、將異或后的結(jié)果分為 8個(gè)6位長(zhǎng)的部分,第1位到第 6位稱(chēng)為 B1, 第7位到第12位稱(chēng)為B2,依此類(lèi)推,第43位到第48位稱(chēng)為B8。(4) 、按S表變換所有的BJ,初始J=1。所有在S表的值都被當(dāng)作4位 長(zhǎng)度處理。(i)將BJ的第1位和第6位組合為一個(gè)2位長(zhǎng)度的變量MM作為在

4、SJ中的行號(hào)。(ii)、將BJ的第2位到第5位組合,作為一個(gè)4位長(zhǎng)度的變量N, N作為在SJ中的列號(hào)。(iii) 、用 SJMN來(lái)取代 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處開(kāi)始循環(huán)執(zhí)行,直到K16被變換完成。5、組合變換后的R16L16(注意:R作為開(kāi)始的32位),按下表(IP-1) 變換得到最后的結(jié)果。四、實(shí)驗(yàn)步驟利用編程語(yǔ)言實(shí)現(xiàn)DES加解密算法。1、編程2、調(diào)試3、運(yùn)行結(jié)果4、存盤(pán)五、實(shí)驗(yàn)

5、結(jié)果加密:Key: 0x30 0x30 0x30 0x300x30( 8 個(gè)字節(jié))Data: 0x31 0x31 0x31 0x310x31( 8 個(gè)字節(jié))Mode: En crypti on結(jié)果:65 5e a6 28 cf 62 58 5f解密:Key: 0x31 0x31 0x31( 8 個(gè) 0x31)Data: 65 5e a6 28 cf 62 58 5fMode: Decrypti on結(jié)果:0x31 0x31 0x31 ( 8 個(gè) 0x31)六、實(shí)驗(yàn)思考題置換XORJ32位32位C1D1七、DES源程序#i nclude "memory.h"#include

6、"stdio.h"#in elude <iostream>using n amespace std;enum encrypt,decrypt;/ENCRYPT:加密,DECRYPT :解密void des_r un (i nt out8,i nt in 8,bool type=e ncrypt);/設(shè)置密鑰void des_setkey(c onst int key8);static void f_fun c(bool in 32,co nst bool ki48);/f 函數(shù)static void s_fun c(bool out32,co nst bool

7、in 48);/s 盒代替/變換static void transform(bool *out, bool *in, const int *table, int len);static void tran s(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,con st i nt *i n, int bits);/位

8、組轉(zhuǎn)換成字節(jié)組static void bittobyte1(int *out, const bool *in, int bits);static void bytetobit(bool *out,const int *in,int bits);/置換IP表conststaticintip_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,3

9、7,29,21,13,5,63,55,47,39,31,23,15,7;/逆置換IP-1表conststaticintipr_table64=40,8,48,16,56,24,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位選擇表static const int e_table48=32,1,2,3,4,5

10、,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,27,28,29,28,29,30,31,32,1;/P換位表conststaticintp_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,

11、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,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,2

12、9,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 static 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,

13、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, 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,

14、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, 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,

15、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, 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, 1

16、5, 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, 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,

17、 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, 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

18、, 13, 15, 12, 9, 0, 3, 5, 6, 11 ;static bool subkey1648;/16 圈子密鑰 void des_run(int out8,int in8, 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<

19、8;i+)for(int j=0;j<8;j+) cout<<mi*8+j; cout<<endl; cout<<endl;*/ if(type=encrypt)for(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)

20、; 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<<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(i

21、nt i=0;i<16;i+)rotatel(kl,28,loop_tablei);rotatel(kr,28,loop_tablei); transform(subkeyi,k,pc2_table,48);void f_func(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

22、;i<8;i+,in+=6,out+=4)j=(in0<<1)+in5; k=(in1<<3)+(in2<<2)+(in3<<1)+in4; bytetobit(out,&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)bo

23、ol temp32;memcpy(temp,in,32);memcpy(out,in+32,32);memcpy(out+32,temp,32);void XOR(bool *ina,const bool *inb,int len)for(int i=0;i<len;i+) in a=i nbi;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 bytetobi

24、t(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,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<bit

25、s;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+) 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

26、); puts("after encrypting:");for(i=0;i<8;i+) cout<<hex<<stri<<" "printf("n");puts("after decrypting:");des_run(str,str,decrypt); for(i=0;i<8;i+) cout<<hex<<stri<<" "printf("n");return 0;實(shí)驗(yàn)二 RSA 加解密算

27、法的實(shí)現(xiàn)實(shí)驗(yàn)?zāi)康募叭蝿?wù):掌握 RSA 加密算法的加解密過(guò)程。二、實(shí)驗(yàn)環(huán)境VC或TC編程環(huán)境;主機(jī)操作系統(tǒng)為 Windows2000或 Windows XP;三、實(shí)驗(yàn)原理RSA 加密算法是一種非對(duì)稱(chēng)加密算法。在公鑰加密標(biāo)準(zhǔn)和電子商業(yè)中RSA被廣泛使用。RSA是1977年由羅納德李維斯特(Ron Rivest)、阿迪薩莫爾、 (Adi Shamir、和倫納德阿德曼(Leonard Adleman) 一起提出的。當(dāng)時(shí)他們?nèi)?人都在麻省理工學(xué)院工作。 RSA 就是他們?nèi)诵帐祥_(kāi)頭字母拼在一起組成的。RSA 算法的可靠性基于分解極大的整數(shù)是很困難的。假如有人找到一種很 快的分解因子的算法的話,那么用RS

28、A加密的信息的可靠性就肯定會(huì)極度下降。 但找到這樣的算法的可能性是非常小的。今天只有短的RSA鑰匙才可能被強(qiáng)力方式解破。到2008年為止,世界上還沒(méi)有任何可靠的攻擊 RSA算法的方式。只 要其鑰匙的長(zhǎng)度足夠長(zhǎng),用 RSA加密的信息實(shí)際上是不能被解破的。1、公鑰和私鑰的產(chǎn)生假設(shè) Alice 想要通過(guò)一個(gè)不可靠的媒體接收 Bob 的一條私人訊息。 她可以用 以下的方式來(lái)產(chǎn)生一個(gè)公鑰和一個(gè)密鑰:隨意選擇兩個(gè)大的質(zhì)數(shù)p和q, p不等于q,計(jì)算N=pq。根據(jù)歐拉函數(shù) ,不大于 N 且與 N 互質(zhì)的整數(shù)個(gè)數(shù)為 (p-1)(q-1)選擇一個(gè)整數(shù)e與(p-1)(q-1)互質(zhì),并且e小于(p-1)(q-1) 用

29、以下這個(gè)公式計(jì)算 d: dx e = 1 (mod (p-1)(q-1) 將p和q的記錄銷(xiāo)毀。e 是公鑰, d 是私鑰。 d 是秘密的,而 N 是公眾都知道的。 Alice 將她的公鑰 傳給Bob,而將她的私鑰藏起來(lái)。2、加密消息假設(shè)Bob想給Alice送一個(gè)消息m,他知道Alice產(chǎn)生的N和e。他使用起 先與Alice約好的格式將m轉(zhuǎn)換為一個(gè)小于N的整數(shù)n,比如他可以將每一個(gè)字 轉(zhuǎn)換為這個(gè)字的 Unicode 碼,然后將這些數(shù)字連在一起組成一個(gè)數(shù)字。 假如他的 信息非常長(zhǎng)的話,他可以將這個(gè)信息分為幾段,然后將每一段轉(zhuǎn)換為n。用下面這個(gè)公式他可以將 n 加密為 c:計(jì)算c并不復(fù)雜。Bob算出c

30、后就可以將它傳遞給Alice。3、解密消息Alice得到Bob的消息c后就可以利用她的密鑰d來(lái)解碼。她可以用以下這 個(gè)公式來(lái)將 c 轉(zhuǎn)換為 n:得到 n 后,她可以將原來(lái)的信息 m 重新復(fù)原。解碼的原理是以及ed = 1 (mod p-1)和 ed = 1 (mod q-1)。費(fèi)馬小定理證明和這說(shuō)明(因?yàn)閜和q是不同的質(zhì)數(shù))四、實(shí)驗(yàn)步驟1 、求素?cái)?shù) p 和 q2、求公鑰(e,n) : e 與 ® (n) = (p- 1)(q 1)互質(zhì)3、求私鑰(d,n) : dx e = 1 (mod (p-1)(q-1)4、加密過(guò)程: c=(M e)mod n5、解密過(guò)程 : m=(C d)mod

31、 n五、實(shí)驗(yàn)結(jié)果 找兩個(gè)素?cái)?shù) : p=47 q=59n=p*q=2773 ,t=(p-1)*(q-1)=2668尋找 e 滿足 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): dx e = 1 (mod (p-1)(q-1)。2、加密過(guò)程: c=(M e)mod n3、解密過(guò)程 :m=(Cd)mod n七、

32、RSA源程序#include <iostream>#include <string.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

33、;long long t1,t2,t3;long long q;while(y3!=0) if(y3=1)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 long k=1; for(i=0;i<b;i+) k=(k%c)*a)%c;return k;in

34、t main()long long e,t,p,q,d,n,a,b;long long z100; int k=0,random; cout<<"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

35、+; if(k=10) break;else if(k=100) break; srand(unsigned)time(0); 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<&

36、lt;"Encrypt:"<<b<<endl;b=pow(b,d,n); cout<<"Decrypt:"<<b<<endl;實(shí)驗(yàn)三 認(rèn) 證系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)一、實(shí)驗(yàn)?zāi)康募叭蝿?wù)1、掌握關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的基礎(chǔ)知識(shí)和基本原理。 2、掌握一種關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng) ,如: SQL Server、 Access3、掌握一種軟件開(kāi)發(fā)工具,如 VC 或 VB4、掌握計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)知識(shí)及網(wǎng)絡(luò)數(shù)據(jù)傳輸協(xié)議: TCP/IP 5、能應(yīng)用 VC 或 VB 等開(kāi)發(fā)工具進(jìn)行 Windows Socket 編寫(xiě)程序6、 掌握一種對(duì)

37、稱(chēng)加密算法原理,如:DES,用此算法對(duì)數(shù)據(jù)進(jìn)行加解密,并能 編寫(xiě)程序?qū)崿F(xiàn)7、 掌握一種非對(duì)稱(chēng)加密算法原理,如:RSA,用此算法對(duì)數(shù)據(jù)進(jìn)行加解密,并 能編程程序?qū)崿F(xiàn)8、掌握客戶 /服務(wù)器模式的工作原理9、編程實(shí)現(xiàn)認(rèn)證系統(tǒng),調(diào)試所編程序10、觀察程序運(yùn)行結(jié)果二、實(shí)驗(yàn)環(huán)境1、 客戶機(jī)(普通PC機(jī),安裝VC或VB等開(kāi)發(fā)工具)1臺(tái)2、服務(wù)器(普通 PC 機(jī),安裝 VC 或 VB 等開(kāi)發(fā)工具, 關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)SQL Server)三、實(shí)驗(yàn)原理隨著In ternet的飛速發(fā)展,網(wǎng)絡(luò)安全的地位日益突出。網(wǎng)絡(luò)的安全措施應(yīng)是 能全方位地針對(duì)各種不同的威脅,這樣才能確保網(wǎng)絡(luò)信息的保密性、 完整性和可用性。作為安

38、全服務(wù)中的一種-實(shí)體認(rèn)證尤為重要。在一個(gè)公開(kāi)的分布式網(wǎng)絡(luò)環(huán)境中,工作站上的用戶希望訪問(wèn)分布在網(wǎng)絡(luò)上的 服務(wù)器資源。但網(wǎng)絡(luò)上的資源僅允許授權(quán)用戶的特定權(quán)限的訪問(wèn),因此, 在分布 式網(wǎng)絡(luò)中,必須提供一種機(jī)制來(lái)對(duì)用戶的身份進(jìn)行認(rèn)證?,F(xiàn)在常用的一些認(rèn)證協(xié)議是為 TCP/IP網(wǎng)絡(luò)設(shè)計(jì)的基于Client/Server模式的 三方驗(yàn)證協(xié)議,廣泛應(yīng)用于In ternet服務(wù)的訪問(wèn),網(wǎng)絡(luò)中的認(rèn)證協(xié)議服務(wù)起著可 信仲裁者的作用。認(rèn)證協(xié)議基于對(duì)稱(chēng)密碼體制或非對(duì)稱(chēng)密碼體制,可提供安全的客體認(rèn)證。用戶在客戶機(jī)上登錄,在登錄界面上,輸入用戶名 User和密碼Password 用戶名以正常字符顯示,密碼以星號(hào)顯示,為了防止

39、密碼在網(wǎng)上傳輸被竊聽(tīng)者獲 取,用戶輸入的密碼在客戶機(jī)上加密 Ek(Password),所以在網(wǎng)上傳輸?shù)氖墙?jīng)過(guò)加 密的用戶密碼Ek(Password)b由于偷聽(tīng)者不知密鑰K,所以即使都到信息Ek(Password),也得不到用戶的 密碼 Password服務(wù)器接收客戶機(jī)傳輸過(guò)來(lái)的信息, 提取用戶名User密文Ek(Password),在 服務(wù)器端對(duì)密文解密,Dk (Ek(Password) )= Password得到用戶的密碼Password 管理員在服務(wù)器數(shù)據(jù)庫(kù)中,讀出庫(kù)中存貯的用戶名與密碼,與接收來(lái)的用戶 名與密碼相比較,如果相等,貝U為合法用戶,如果不相等,貝U為非法用戶。流程圖如下:網(wǎng)絡(luò)

40、傳輸服務(wù)器端Password(1)基于對(duì)稱(chēng)密碼體制 客戶機(jī)端KePasswordEk (Password)(K&beKUb(Passwor)( KRb(b)公開(kāi)密鑰加密:保密性Password常規(guī)加密:保密和鑒別 網(wǎng)絡(luò)傳輸客戶機(jī)端Password此實(shí)驗(yàn)只是認(rèn)識(shí)協(xié)議的簡(jiǎn)單模擬,實(shí)際應(yīng)用的網(wǎng)絡(luò)安全認(rèn)證協(xié)議比此復(fù)雜的 多,特此說(shuō)明??梢赃M(jìn)一步分析該協(xié)議所存在的問(wèn)題,提出改進(jìn)方法,并實(shí)現(xiàn)。四、實(shí)驗(yàn)步驟客戶機(jī)端:(一) :編寫(xiě)程序,實(shí)現(xiàn)用戶登錄界面。(二) :編寫(xiě)程序,實(shí)現(xiàn)對(duì)用戶密碼的加密1:選用對(duì)稱(chēng)密碼算法,如 DES假定明文 m 和密鑰 k 都是 64 比特的 0,1符號(hào)串。設(shè)m=mim2

41、m 64k=kik2k64mi ,ki=0 或 1, i=1,2, ,64加密過(guò)程表達(dá)如下:DES(m)=IP-1 Ti6 T15T 2 Ti IP(m)迭代循環(huán)次數(shù)為16輪,其中T是每輪迭代。2:選用非對(duì)稱(chēng)密碼算法,如 RSA使用RSA有三個(gè)階段。(1) 、RSA階段1:確定公鑰和私鑰1) 選擇兩個(gè)大素?cái)?shù),P和 Q。2) 計(jì)算 N = P * Q。3) 計(jì)算f(n) = (P - 1)(Q -1)。4) 選擇 e,其中 1 < e < n-1 且 GCD (e, f(n) = 1。5) 計(jì)算d,其中ed = 1 mod f(n)(使用擴(kuò)展的歐幾里德算法)6) (e, n)作為公鑰

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

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

44、 "ui_mainwindow.h"MainWindow:MainWindow( QWidget *parent) : QMainWindow(parent), ui (new Ui: MainWindow)ui ->setupUi( this );ui -> lineEdit ->setEchoMode( QLineEdit : Password); sender = new QUdpSocket( this ); receiver = new QUdpSocke(t this ); receiver ->bind( QHostAddress: L

45、ocalHost , 5930); connect( receiver , SIGNAL(readyRead(), this , SLOT(readPendingDatagrams();MainWindow: MainWindow()delete ui ;int MainWindow:pow( int a, int b, int n)int i,temp = 1;for (i= 0;i<b;i+)temp = (temp*a)%n;return temp;QString MainWindow:key( QString str)QByteArray temp;int n 16;int i,

46、e = 41,N = 133;temp = str.toLatin1();char *name = temp.data(),num 4;QString q;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' ;else if (ni< 100)num2 = num1;num1 = num0;num0 = '0' ;num4

47、 = '0' ;QString p = QString ( QLatin1String (num);q += p;free(name);return q;QString MainWindow:unkey( QString str)QByteArray temp;int n 16;int i,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

48、,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' ;QString q = QString ( QLatin1String (pname);free(name);free(pname);return q;void MainWindow:readPendingDatagrams()in

49、t flag = 0;while ( receiver ->hasPendingDatagrams() if (flag = 0) QByteArray datagram;QString data;datagram.resize( receiver ->pendingDatagramSize();receiver ->readDatagram(datagram.data(), datagram.size();data = datagram.data();ui -> textEdit_3 ->setText(data);flag+;elseQByteArray datagram;QString data;datagram.resize( receiver ->pendingDatagramSize();receiver ->readDatagram(datagram.data(), datagram.size();data = datagram.dat

溫馨提示

  • 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)論