




版權(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ì)稱加密算法,掌握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位作為奇偶校驗(yàn)位。 2、變換密鑰。 (
2、1)、舍棄64位密鑰中的奇偶校驗(yàn)位,根據(jù)下表(PC-1)進(jìn)行密鑰變換得到56位的密鑰,在變換中,奇偶校驗(yàn)位以被舍棄。 (2)、將變換后的密鑰分為兩個(gè)部分,開始的28位稱為C0,最后的28位稱為D0。(3)生成16個(gè)子密鑰,初始I=1。 (i)、同時(shí)將CI、DI左移1位或2位,根據(jù)I值決定左移的位數(shù)。(ii)、將CIDI作為一個(gè)整體按下表(PC-2)變換,得到48位的KI (iii)、從1-2-3-1處循環(huán)執(zhí)行,直到K16被計(jì)算完成。 (二)、處理64位的數(shù)據(jù) 1、取得64位的數(shù)據(jù),如果數(shù)據(jù)長(zhǎng)度不足64位,應(yīng)該將其擴(kuò)展為64位(例如補(bǔ)零) 2、將64位數(shù)據(jù)按下表變換(IP) 3、將變換后的數(shù)據(jù)分
3、為兩部分,開始的32位稱為L(zhǎng)0,最后的32位稱為R0。4、用16個(gè)子密鑰加密數(shù)據(jù),初始I=1。 (1)、將32位的RI-1按下表(E)擴(kuò)展為48位的EI-1 (2)、異或EI-1和KI,即EI-1 XOR KI (3)、將異或后的結(jié)果分為8個(gè)6位長(zhǎng)的部分,第1位到第6位稱為B1,第7位到第12位稱為B2,依此類推,第43位到第48位稱為B8。 (4)、按S表變換所有的BJ,初始J=1。所有在S表的值都被當(dāng)作4位長(zhǎng)度處理。 (i)將BJ的第1位和第6位組合為一個(gè)2位長(zhǎng)度的變量M,M作為在SJ中的行號(hào)。 (ii)、將BJ的第2位到第5位組合,作為一個(gè)4位長(zhǎng)度的變量N,N作為在SJ中的列號(hào)。(iii
4、)、用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處開始循環(huán)執(zhí)行,直到K16被變換完成。 5、組合變換后的R16L16(注意:R作為開始的32位),按下表(IP-1)變換得到最后的結(jié)果。 四、 實(shí)驗(yàn)步驟利用編程語(yǔ)言實(shí)現(xiàn)DES加解密算法。1、 編程2、 調(diào)試3、 運(yùn)行結(jié)果4、 存盤五、實(shí)驗(yàn)結(jié)果加密:Key: 0x30 0x30 0x30 0x30.0x30(8個(gè)字節(jié))Data: 0x31 0x31 0x
5、31 0x31.0x31(8個(gè)字節(jié))Mode: Encryption結(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: Decryption結(jié)果:0x31 0x31.0x31(8個(gè)0x31)六、實(shí)驗(yàn)思考題DES算法主要有哪幾部分?可以畫出流程64位密鑰64位明文置換選擇初始置換循環(huán)左移置換選擇16輪加密32位互換逆初始置換一輪迭代過(guò)程:28位28位32位32位左移左移擴(kuò)展/置換XOR置換/壓縮代替/選擇置換D1C132位32位七、DES源程序#include &qu
6、ot;memory.h"#include "stdio.h"#include <iostream>using namespace std;enum encrypt,decrypt;/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);/f函數(shù)static void s_func(bool out32,c
7、onst bool in48);/s盒代替/變換static void transform(bool *out, bool *in, const int *table, int len);static 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)
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表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,5
9、3,45,37,29,21,13,5,63,55,47,39,31,23,15,7;/逆置換IP-1表const static int ipr_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
10、,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,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
11、,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, 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,4
12、8,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 static int s_box8416= /s1 14, 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,
13、 0, 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13, /s2 15, 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, /s3 10, 0, 9, 14, 6, 3
14、, 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, 10, 14, 7, 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12, /s4 7, 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, 1
15、0, 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, /s5 2, 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,
16、 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3, /s6 12, 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, 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, /s7 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9,
17、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, 5, 0, 15, 14, 2, 3, 12, /s8 13, 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,
18、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, bool type) /for(int i=0;i<8;i+) /printf("%d ",ini); /printf("n"); static bool m64,tmp32,*li=&m0, *ri=&m32; byte
19、tobit1(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(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); else trans(m,m); for(in
20、t 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<<endl;*/ transform(m,m,ipr_table,64); bittobyte1(out,m,64);void des_setkey(const int key8) static bool k64, *kl
21、=&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_func(bool in32,const bool ki48) static bool mr48; transform(mr,in,e_table,48); XOR(mr,ki,48); s_func(in
22、,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,&s_boxijk,4); void transform(bool *out,bool *in,const int *table,int len) static bool tmp256;
23、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) for(int i=0;i<len;i+) inai=inbi;void rotatel(bool *in,int len,int loop) static bo
24、ol 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,const int *in,int bits) for(int i=0;i<bits;i+) outi=(ini/8>>(7-i%8
25、) &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+) cin>>hex>>stri; puts("please input your key"
26、;); 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"); puts("after decrypting:"); des_run(str,str,de
27、crypt); for(i=0;i<8;i+) cout<<hex<<stri<<" " printf("n"); return 0;實(shí)驗(yàn)二 RSA加解密算法的實(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ì)稱加密算法。在公鑰加密標(biāo)準(zhǔn)和電子商業(yè)中RSA被廣泛使用。RSA是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾、(Adi Shami
28、r)和倫納德·阿德曼(Leonard Adleman)一起提出的。當(dāng)時(shí)他們?nèi)硕荚诼槭±砉W(xué)院工作。RSA就是他們?nèi)诵帐祥_頭字母拼在一起組成的。RSA算法的可靠性基于分解極大的整數(shù)是很困難的。假如有人找到一種很快的分解因子的算法的話,那么用RSA加密的信息的可靠性就肯定會(huì)極度下降。但找到這樣的算法的可能性是非常小的。今天只有短的RSA鑰匙才可能被強(qiáng)力方式解破。到2008年為止,世界上還沒(méi)有任何可靠的攻擊RSA算法的方式。只要其鑰匙的長(zhǎng)度足夠長(zhǎng),用RSA加密的信息實(shí)際上是不能被解破的。1、公鑰和私鑰的產(chǎn)生假設(shè)Alice想要通過(guò)一個(gè)不可靠的媒體接收Bob的一條私人訊息。她可以用以下的方
29、式來(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) 用以下這個(gè)公式計(jì)算d:d× e 1 (mod (p-1)(q-1) 將p和q的記錄銷毀。 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è)
30、字的Unicode碼,然后將這些數(shù)字連在一起組成一個(gè)數(shù)字。假如他的信息非常長(zhǎng)的話,他可以將這個(gè)信息分為幾段,然后將每一段轉(zhuǎn)換為n。用下面這個(gè)公式他可以將n加密為c:計(jì)算c并不復(fù)雜。Bob算出c后就可以將它傳遞給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) = (p1)(q1)互質(zhì)3、求私鑰(d,n
31、):d× e 1 (mod (p-1)(q-1)4、加密過(guò)程:c=(Me)mod n5、解密過(guò)程:m=(Cd)mod n 五、實(shí)驗(yàn)結(jié)果找兩個(gè)素?cái)?shù) : p=47 q=59 n=p*q=2773 ,t=(p-1)*(q-1)=2668 尋找 e 滿足 e<t 并且 e 和 t 互素,找到 e=63 ,尋找 d 使 e*d%t =1 得到 d=847 1:加密 m 465,得C= 11182:解密C=1118,得m=465六、思考題RSA算法主要有哪幾部分? 1、 輸入p和q,并求出公鑰(e,n):e與(n) = (p1)(q1)互質(zhì),再求出私鑰(d,n):d× e 1 (
32、mod (p-1)(q-1)。2、加密過(guò)程:c=(Me)mod n3、解密過(guò)程:m=(Cd)mod n七、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; else b=b-a; return a;long long Euclid (long long d,lo
33、ng 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) 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; else return 0;long long pow(long long a,long long b,long long c) lon
34、g long i; long long k=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<<"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(g
35、cd(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); random=rand()%k; e=zrandom; d=Euclid(e,t);cout<<"e:"<<e<<endl; cout<<"d:"<<d<<endl;
36、cout<<"Please input a number"<<endl; cin>>a; b=pow(a,e,n); cout<<"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、掌握一種軟件開發(fā)
37、工具,如VC或VB4、掌握計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)知識(shí)及網(wǎng)絡(luò)數(shù)據(jù)傳輸協(xié)議:TCP/IP5、能應(yīng)用VC或VB等開發(fā)工具進(jìn)行Windows Socket編寫程序6、掌握一種對(duì)稱加密算法原理,如:DES,用此算法對(duì)數(shù)據(jù)進(jìn)行加解密,并能編寫程序?qū)崿F(xiàn)7、掌握一種非對(duì)稱加密算法原理,如: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等開發(fā)工具) 1臺(tái)2、服務(wù)器(普通PC機(jī),安裝VC或VB等開發(fā)工具, 關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)SQL Server) 1臺(tái)三、實(shí)驗(yàn)原理隨著Intern
38、et的飛速發(fā)展,網(wǎng)絡(luò)安全的地位日益突出。網(wǎng)絡(luò)的安全措施應(yīng)是能全方位地針對(duì)各種不同的威脅,這樣才能確保網(wǎng)絡(luò)信息的保密性、完整性和可用性。作為安全服務(wù)中的一種-實(shí)體認(rèn)證尤為重要。在一個(gè)公開的分布式網(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)證。現(xiàn)在常用的一些認(rèn)證協(xié)議是為TCP/IP網(wǎng)絡(luò)設(shè)計(jì)的基于Client/Server模式的三方驗(yàn)證協(xié)議,廣泛應(yīng)用于Internet服務(wù)的訪問(wèn),網(wǎng)絡(luò)中的認(rèn)證協(xié)議服務(wù)起著可信仲裁者的作用。認(rèn)證協(xié)議基于對(duì)稱密碼體制或非對(duì)稱密碼體制, 可提供安全的客體認(rèn)
39、證。用戶在客戶機(jī)上登錄,在登錄界面上,輸入用戶名User和密碼Password,用戶名以正常字符顯示,密碼以星號(hào)顯示,為了防止密碼在網(wǎng)上傳輸被竊聽者獲取,用戶輸入的密碼在客戶機(jī)上加密Ek(Password),所以在網(wǎng)上傳輸?shù)氖墙?jīng)過(guò)加密的用戶密碼Ek(Password)。由于偷聽者不知密鑰K,所以即使都到信息Ek(Password),也得不到用戶的密碼Password服務(wù)器接收客戶機(jī)傳輸過(guò)來(lái)的信息,提取用戶名User密文Ek(Password),在服務(wù)器端對(duì)密文解密,Dk(Ek(Password)))= Password,得到用戶的密碼Password。管理員在服務(wù)器數(shù)據(jù)庫(kù)中,讀出庫(kù)中存貯的用戶
40、名與密碼,與接收來(lái)的用戶名與密碼相比較,如果相等,則為合法用戶,如果不相等,則為非法用戶。流程圖如下:(1)基于對(duì)稱密碼體制 客戶機(jī)端 網(wǎng)絡(luò)傳輸 服務(wù)器端 Password PasswordDEE K EK(Password) K (a) 常規(guī)加密:保密和鑒別(2) 客戶機(jī)端 網(wǎng)絡(luò)傳輸 Password PasswordDEE KUb EKUb(Passwor) KRb (b) 公開密鑰加密:保密性此實(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ī)端:(一):編寫程序,實(shí)現(xiàn)用戶登錄界面。(二
41、):編寫程序,實(shí)現(xiàn)對(duì)用戶密碼的加密 1:選用對(duì)稱密碼算法,如DES假定明文m和密鑰k都是64比特的0,1符號(hào)串。設(shè)m=m1m2m64k=k1k2k64mi,ki=0或1,i=1,2,64加密過(guò)程表達(dá)如下:DES(m)=IP-1·T16·T15·T2·T1·IP(m)迭代循環(huán)次數(shù)為16輪,其中T是每輪迭代。 2:選用非對(duì)稱密碼算法,如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 <
42、 n-1 且 GCD (e, f(n) = 1。5)計(jì)算d,其中 ed = 1 mod f(n) (使用擴(kuò)展的歐幾里德算法) 6) (e,n)作為公鑰,(d,n)作為私鑰。(2)、RSA階段2:加密信息 為了使用RSA加密消息M,你必須進(jìn)行下列加密運(yùn)算:C=Memod n,其中C 是你的密文,發(fā)送C。(3)、RSA階段3:解密信息為了使用RSA解密密文C,你必須進(jìn)行下列解密運(yùn)算為:M=Cdmod n ,其中M是你的原始明文。(三):編寫客戶端網(wǎng)絡(luò)傳輸程序?qū)崿F(xiàn)數(shù)據(jù)包的傳輸:Windows Socket編程。服務(wù)器端(一):管理員在服務(wù)器端建立數(shù)據(jù)庫(kù),存貯用戶的用戶名User和密碼Password
43、,現(xiàn)實(shí)中用戶都是現(xiàn)場(chǎng)輸入。(二) 編寫程序,實(shí)現(xiàn)對(duì)用戶密碼的加密(三)編寫程序,從數(shù)據(jù)庫(kù)從讀出用戶名User和密碼Password(四)比較用戶輸入的密碼與數(shù)據(jù)庫(kù)中存貯的密碼是否相等,如相等,是合法用戶,不相等,為非法用戶。(五)編寫程序,實(shí)現(xiàn)對(duì)用戶密碼的加密編寫界面程序。以上所有操作均在界面下操作五、實(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ù)被攻破,攻擊者拿到的是加
44、密的數(shù)據(jù)還需要進(jìn)一步破解。七、源程序#include "mainwindow.h"#include "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 QUdpSock
45、et(this); receiver->bind(QHostAddress:LocalHost,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
46、str) QByteArray temp; int n16; int i,e = 41,N = 133; temp = str.toLatin1(); char *name = temp.data(),num4; 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
47、; num1 = num0; num0 = '0' num4 = '0' QString p = QString(QLatin1String(num); q += p; free(name); return q;QString MainWindow:unkey(QString str) QByteArray temp; int n16; int i,j,d = 2837,N = 133; temp = str.toLatin1(); char *name = temp.data(),num4,*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 =
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 商業(yè)保密及競(jìng)業(yè)禁止協(xié)議合同書
- 信息技術(shù)支持下的農(nóng)產(chǎn)品電商合作合同
- 財(cái)務(wù)證明書個(gè)人投資及資產(chǎn)情況說(shuō)明(8篇)
- 物流運(yùn)輸服務(wù)合同修訂協(xié)議
- 設(shè)計(jì)師項(xiàng)目實(shí)習(xí)成果證明(5篇)
- 銀行行業(yè)綠色金融方案
- 智能醫(yī)療影像系統(tǒng)升級(jí)協(xié)議
- 信息技術(shù)領(lǐng)域在職人員證明(5篇)
- 行政管理學(xué)課程設(shè)計(jì)與實(shí)施試題及答案
- 農(nóng)村生態(tài)農(nóng)業(yè)資源開發(fā)承建合同
- 鐵路維修教材分析課件
- 砸墻拆除合同
- 初級(jí)會(huì)計(jì)師考試歷年真題試題及答案
- 2025長(zhǎng)江三峽集團(tuán)限公司招聘961人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 電能技術(shù)監(jiān)督培訓(xùn)
- 2025勞動(dòng)合同書(上海市人力資源和社會(huì)保障局監(jiān)制)
- 酒店前臺(tái)接待禮儀標(biāo)準(zhǔn)試題及答案
- 六年級(jí)總復(fù)習(xí)常見(jiàn)的量市公開課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件
- 園林植物養(yǎng)護(hù)管理 項(xiàng)目4 任務(wù)4.5行道樹整形修剪學(xué)習(xí)資料
- 2025年高考作文備考訓(xùn)練:歌曲《世界贈(zèng)予我的》
- 四年級(jí)下冊(cè)課外閱讀(含答案)
評(píng)論
0/150
提交評(píng)論