實(shí)驗報告_密碼學(xué)_第1頁
實(shí)驗報告_密碼學(xué)_第2頁
實(shí)驗報告_密碼學(xué)_第3頁
實(shí)驗報告_密碼學(xué)_第4頁
實(shí)驗報告_密碼學(xué)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、信息安全實(shí)驗報告 學(xué) 號:學(xué)生姓名: 班 級: 實(shí)驗三 密碼學(xué)實(shí)驗一、古典密碼算法實(shí)驗一、 實(shí)驗?zāi)康耐ㄟ^編程實(shí)現(xiàn)替代密碼算法和置換密碼算法,加深對古典密碼體制的了解,為深入學(xué)習(xí)密碼學(xué)奠定基礎(chǔ)。二、 編譯環(huán)境運(yùn)行 windows 或 linux 操作系統(tǒng)的 pc 機(jī),具有 gcc(linux)、vc(windows)等 c語言編譯環(huán)境。三、 實(shí)驗原理古典密碼算法歷史上曾被廣泛應(yīng)用,大都比較簡單,使用手工和機(jī)械操作來實(shí)現(xiàn)加密和解密。它的主要應(yīng)用對象是文字信息,利用密碼算法實(shí)現(xiàn)文字信息的加密和解密。下面介紹兩種常見的具有代表性的古典密碼算法,以幫助讀者對密碼算法建立一個初步的印象。 1 替代密碼 替

2、代密碼算法的原理是使用替代法進(jìn)行加密,就是將明文中的字符用其它字符替代后形成密文。例如:明文字母 a、b、c、d ,用 d、e、f、g做對應(yīng)替換后形成密文。 替代密碼包括多種類型,如單表替代密碼、多明碼替代密碼、多字母替代密碼、多表替代密碼等。下面我們介紹一種典型的單表替代密碼,愷撒(caesar)密碼,又叫循環(huán)移位密碼。它的加密方法,就是將明文中的每個字母用此字符在字母表中后面第 k個字母替代。它的加密過程可以表示為下面的函數(shù): e(m)=(m+k) mod n 其中:m 為明文字母在字母表中的位置數(shù);n 為字母表中的字母個數(shù);k 為密鑰;e(m)為密文字母在字母表中對應(yīng)的位置數(shù)。 例如,對

3、于明文字母 h,其在字母表中的位置數(shù)為 8,設(shè) k=4,則按照上式計算出來的密文為 l: e(8) = (m+k) mod n = (8+4) mod 26 = 12 = l 2 置換密碼 置換密碼算法的原理是不改變明文字符,只將字符在明文中的排列順序改變,從而實(shí)現(xiàn)明文信息的加密。置換密碼有時又稱為換位密碼。 矩陣換位法是實(shí)現(xiàn)置換密碼的一種常用方法。它將明文中的字母按照給的順序安排在一個矩陣中,然后用根據(jù)密鑰提供的順序重新組合矩陣中字母,從而形成密文。例如,明文為 attack begins at five,密鑰為 cipher,將明文按照每行 6 列的形式排在矩陣中,形成如下形式: a t

4、t a c k b e g i n s a t f i v e 根據(jù)密鑰 cipher中各字母在字母表中出現(xiàn)的先后順序,給定一個置換: 1 2 3 4 5 6 f = 1 4 5 3 2 6 根據(jù)上面的置換,將原有矩陣中的字母按照第 1 列,第 4 列,第 5 列,第 3 列,第 2列,第 6 列的順序排列,則有下面形式: a a c t t k b i n g e s a i v f t e 從而得到密文:abatgftetcnvaiikse 其解密的過程是根據(jù)密鑰的字母數(shù)作為列數(shù),將密文按照列、行的順序?qū)懗觯俑鶕?jù)由密鑰給出的矩陣置換產(chǎn)生新的矩陣,從而恢復(fù)明文。四、 實(shí)驗內(nèi)容和步驟1、根據(jù)

5、實(shí)驗原理部分對替代密碼算法的介紹,自己創(chuàng)建明文信息,并選擇一個密鑰 k,編寫替代密碼算法的實(shí)現(xiàn)程序,實(shí)現(xiàn)加密和解密操作。 2、根據(jù)實(shí)驗原理部分對置換密碼算法的介紹,自己創(chuàng)建明文信息,并選擇一個密鑰,編寫置換密碼算法的實(shí)現(xiàn)程序,實(shí)現(xiàn)加密和解密操作。五、 總結(jié)與思考記錄程序調(diào)試過程中出現(xiàn)的問題,分析其原因并找出解決方法。記錄最終實(shí)現(xiàn)的程序執(zhí)行結(jié)果。思考采取什么樣的手段來防范類似對網(wǎng)絡(luò)的攻擊。六、 實(shí)驗結(jié)果 替換密碼的加密解密先是加密實(shí)現(xiàn)程序為:#include stdio.h #include conio.h main() int k,i=0; char a100,b100=0; printf(p

6、lease input your ming wen:n); gets(a); printf(please input mi shi n); scanf(%d,&k); printf(n); do bi=(char)(ai+k); if(bi122) bi=(char)(bi-26); i+; while(ai!=0); puts(b); getch(); 實(shí)驗結(jié)果為:再是解密:實(shí)現(xiàn)程序為:#include stdio.h#include conio.hmain()int k,i=0;char a100,b100;printf(please input mi wen: n);gets(a);pr

7、intf(please input mi shi: n);scanf(%d,&k);printf(n);dobi=(char)(ai-k);if(bi97)bi=(char)(bi+26);不知道三哪里的問題結(jié)果中的y輸不出來i+;while(ai!=0);puts(b);getch();結(jié)果為: 置換密碼先是加密實(shí)現(xiàn)程序#include#define true 1#define false 0#define n 1000#define m 50int glength(char *a) char *pt; int nlen=0; pt=a; while(*pt)!=0) nlen+; pt+;

8、 return nlen;void encrypt(char *a,int n,int *b) int i,j,k,t,x,y; char cmm,dmm; k=glength(a); puts(a); t=k%n; if(t=0) x=k/n; else x=(k/n)+1; printf(%dn,x); for(i=0;ix;i+) for(j=0;j96)&(ai*n+j123) cij=ai*n+j; printf(%c,cij); else cij= ; printf(%c,cij); printf(n hehen); for(j=0;jn;j+) for(i=0;ix;i+) y=

9、bj; printf(encrypt %dt,y); diy=cij; printf(-%ct,diy); printf(n); for(i=0;ix;i+) for(j=0;j=1&change;-i) change=false; for(j=0;jaj+1) ntemp=aj; aj=aj+1; aj+1=ntemp; change=true; i=0; while(ci)!=0) for(k=0;kn;k+) if(ci)=ak) bx=k; printf(%dt,bx); i+; x+; printf(n); puts(a);int main() int k; char narrn,a

10、n; int bn; clrscr(); printf(please input key:n); gets(narr); k=glength(narr); printf(please input m word:n); gets(a); printf(the data items in ascending order:n); bubble_sort(&narr,k,&b); puts(narr); encrypt(&a,k,&b); puts(a); printf(n); return 0;加密結(jié)果為:二、公鑰加密算法rsa一、實(shí)驗?zāi)康耐ㄟ^使用 rsa 算法對實(shí)驗數(shù)據(jù)進(jìn)行加密和解密,掌握公鑰加密

11、算法的基本原理,熟練掌握 rsa 算法各功能模塊的工作原理和具體運(yùn)算過程。二、實(shí)驗原理rsa 公鑰加密算法是 1977 年由 ron rivest、adi shamirh 和 lenadleman 在(美國麻省理工學(xué)院)開發(fā)的。rsa 取名來自開發(fā)他們?nèi)叩拿?。rsa 是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的所有密碼攻擊,已被 iso 推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)。rsa 算法基于一個十分簡單的數(shù)論事實(shí):將兩個大素數(shù)相乘十分容易,但那時想要對其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。1. rsa 的密鑰生成rsa 的算法涉及三個參數(shù),n、e、d。其中,n 是兩

12、個大質(zhì)數(shù) p、q 的積,n 的二進(jìn)制表示時所占用的位數(shù),就是所謂的密鑰長度。鑒于現(xiàn)代對于大整數(shù)分解的水平不斷增強(qiáng),一般 p、q 的取值都要求在 1024位以上。e 和 d 是一對相關(guān)的值,e 可以任意取,但要求 e 與(p-1)*(q-1)互質(zhì);再選擇 d,要求:(e*d)mod(p-1)*(q-1)=1。、就是密鑰對。一般將前者當(dāng)作公鑰,后者作為私鑰使用。2. rsa 加密/解密過程rsa 加解密和解密的算法完全相同,設(shè) a 為明文,b 為密文,則:a=be mod n;b=ad mod n;e 和 d 可以互換使用,即:a=bd mod n;b=ae mod n;三、實(shí)驗環(huán)境運(yùn)行 wind

13、ows 或 linux 操作系統(tǒng)的 pc 機(jī),具有 gcc(linux)、vc(windows)等 c 語言編譯環(huán)境。四、實(shí)驗內(nèi)容和步驟1. 根據(jù)本講義提供的 rsa 程序,分析 rsa 算法的實(shí)現(xiàn)過程:(1)、利用:void generatekey(rsa_key& publickey,rsa_key& privatekey,unsigned intikeysize)函數(shù)根據(jù)實(shí)際需要生成符合要求長度的公鑰和私鑰,大致步驟如下:a) 隨機(jī)生成兩個指定長度的大素數(shù) p,q。b) 計算 n=p*q,以及 n 的歐拉函數(shù) (n)=(p-1)*(q-1)。c) 隨機(jī)生成一個與 (n)互素的大整數(shù) e(

14、公鑰)。d) 根據(jù)公式 ed1(mod(n),利用函數(shù) multi_inverse(1, big*, big, big*)計算出私鑰 d。(2)、將某個大整數(shù)賦值給一個 big 型變量 m(明文)。(3)、調(diào)用函數(shù) powmod(.,.,.,.)對明文 m 加密得到密文 c。(4)、調(diào)用函數(shù) powmod(.,.,.,.)對密文 c 解密得到明文 d。(5)、比較 m 與 d 是否一致,判斷實(shí)驗結(jié)果是否正確。(6)、調(diào)換公鑰、私鑰后重復(fù)以上步驟,驗證 e、d 的可互換性,并思考為什么可以這樣做。2. 使用實(shí)例分析取 p=11,q=13。首先計算:n=pq=1113=143(n)=(p-1)(q

15、-1)=(11-1) (13-1)=120然后選擇 e=17,滿足 gcd(e,(n)=gcd(17,120)=1,然后根據(jù) ed1(mod(n)計算 d=113。則:公鑰:、私鑰:。設(shè)明文信息:m=24。對明文信息加密,得密文為:cme % n=2417%143=7密文 c 經(jīng)過公開信道發(fā)送到接收方后,接收方用私鑰 d 對密文進(jìn)行解密:mcd % n=7113%143=24從而正確地恢復(fù)出明文。五、思考題1、闡明 rsa 密鑰生成以及加密、解密流程(1)rsa密鑰生成:1)找出p,q,r三個數(shù),p,q互質(zhì),r與(p-1)(q-1)互質(zhì),p,q,r這三個數(shù)便是private key。 2)找出

16、m,使得mr=1 mod (p-1)(q-1) 3)計算n=pq,m,n這兩個數(shù)便是public key(2)流程:用戶a用b的公鑰對key進(jìn)行加密,b收到消息后用自己的私鑰進(jìn)行解密獲取key。2. 使用提供的模塊編寫 rsa 加密程序?qū)?shù)據(jù)進(jìn)行加密和解密,提交程序代碼和執(zhí)行結(jié)果。程序代碼:#include time.h#include big.h#include #define buffersize 4096static miracl* mip = mirsys ( buffersize, 0 );struct rsa_key/密鑰結(jié)構(gòu)體big e;big n;int main(void)v

17、oid generatekey(rsa_key& publickey,rsa_key& privatekey,unsigned int ikeysize);/密鑰生成函數(shù)rsa_key publickey;/公鑰 rsa_key privatekey;/私鑰 big m;/明文mbig c;/密文cbig d;/解密文dunsigned int ikeysize;std:cout請輸入加密密鑰長度(單位比特)ikeysize;std:cout密鑰生成中.std:endl;generatekey(publickey,privatekey,ikeysize/4);/產(chǎn)生ikeysize bit密鑰

18、std:cout密鑰生成完畢std:endl;std:cout請輸入明文:std:hexm;powmod(m.getbig(), publickey.e.getbig(), publickey.n.getbig(), c.getbig();/調(diào)用加密函數(shù)計算:c=(me)%n std:coutrsa加密密文:std:endl;std:coutstd:hexcstd:endl;powmod(c.getbig(), privatekey.e.getbig(), privatekey.n.getbig(), d.getbig();/解密與加密使用同一函數(shù),只是密鑰不同即:d=(cd)%nstd:cout解密:std:endl;std:coutstd:hexdiobase = 16;set_io_buffer_size( buffersize);big e,d,p,q,n,z;generateprime(&p, ikeysize /4, 16);/生成強(qiáng)素數(shù)p

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論