密碼學(xué)課程設(shè)計(jì)報(bào)告_第1頁(yè)
密碼學(xué)課程設(shè)計(jì)報(bào)告_第2頁(yè)
密碼學(xué)課程設(shè)計(jì)報(bào)告_第3頁(yè)
密碼學(xué)課程設(shè)計(jì)報(bào)告_第4頁(yè)
密碼學(xué)課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩19頁(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)介

密碼學(xué)課程設(shè)計(jì)報(bào)告班級(jí):信安09-2班姓名:李明月學(xué)號(hào):08093755目錄1古典密碼算法—?jiǎng)P撒密碼41.1凱撒密碼概述41.2算法原理及設(shè)計(jì)思想41.3主要算法分析41.4程序運(yùn)行結(jié)果41.5密碼平安性分析52序列密碼—RC452.1RC4算法概述52.2算法原理及設(shè)計(jì)思想52.3程序主要算法分析62.4程序運(yùn)行結(jié)果72.5算法分析73分組密碼算法83.1DES加解密算法的實(shí)現(xiàn)83.1.1DES算法概述83.1.2算法原理及設(shè)計(jì)思想83.1.3程序主要算法分析113.1.4程序運(yùn)行結(jié)果133.1.5平安性分析143.2AES加解密算法的實(shí)現(xiàn)143.2.1AES算法概述153.2.2算法原理及設(shè)計(jì)思想153.2.3程序主要算法分析173.2.4程序運(yùn)行結(jié)果223.2.5平安性分析224HASH函數(shù)—MD5算法234.1算法概述234.2算法原理及設(shè)計(jì)思想234.3程序主要算法分析264.4程序運(yùn)行結(jié)果284.5平安性分析285公鑰密碼算法---RSA295.1算法概述295.2算法原理及設(shè)計(jì)思想295.2.1算法描述—密鑰生成295.2.2算法描述—加密、解密295.2.3原理295.3程序主要算法分析305.4程序運(yùn)行結(jié)果315.5平安性分析316設(shè)計(jì)體會(huì)32古典密碼算法---凱撒密碼1.1凱撒密碼概述凱撒密碼作為一種最為古老的對(duì)稱(chēng)加密體制,在古羅馬的時(shí)候都已經(jīng)很流行,他的根本思想是:通過(guò)把字母移動(dòng)一定的位數(shù)來(lái)實(shí)現(xiàn)加密和解密。例如,如果密鑰是把明文字母的位數(shù)向后移動(dòng)三位,那么明文字母B就變成了密文的E,依次類(lèi)推,X將變成A,Y變成B,Z變成C,由此可見(jiàn),位數(shù)就是凱撒密碼加密和解密的密鑰。它是一種代換密碼。據(jù)說(shuō)凱撒是率先使用加密函的古代將領(lǐng)之一,因此這種加密方法被稱(chēng)為凱撒密碼。在密碼學(xué)中凱撒密碼〔或稱(chēng)凱撒加密、凱撒變換、變換加密〕是一種最簡(jiǎn)單且最廣為人知的加密技術(shù)。它是一種替換加密的技術(shù),明文中的所有字母都在字母表上向后〔或向前〕按照一個(gè)固定數(shù)目進(jìn)行偏移后被替換成密文。例如,當(dāng)偏移量是3的時(shí)候,所有的字母A將被替換成D,B變成E,以此類(lèi)推。這個(gè)加密方法是以凱撒的名字命名的,當(dāng)年凱撒曾用此方法與其將軍們進(jìn)行聯(lián)系。凱撒密碼通常被作為其他更復(fù)雜的加密方法中的一個(gè)步驟,例如維吉尼亞密碼。凱撒密碼還在現(xiàn)代的ROT13系統(tǒng)中被應(yīng)用。但是和所有的利用字母表進(jìn)行替換的加密技術(shù)一樣,凱撒密碼非常容易被破解,而且在實(shí)際應(yīng)用中也無(wú)法保證通信平安。1.2算法原理及設(shè)計(jì)思想它是一種替代密碼,通過(guò)將字母按順序推后起3位起到加密作用,如將字母A換作字母D,將字母B換作字母E。因據(jù)說(shuō)愷撒是率先使用加密函的古代將領(lǐng)之一,因此這種加密方法被稱(chēng)為愷撒密碼。這是一種簡(jiǎn)單的加密方法,這種密碼的密度是很低的,只需簡(jiǎn)單地統(tǒng)計(jì)字頻就可以破譯?,F(xiàn)今又叫“移位密碼〞,只不過(guò)移動(dòng)的為數(shù)不一定是3位而已。密碼術(shù)可以大致別分為兩種,即易位和替換,當(dāng)然也有兩者結(jié)合的更復(fù)雜的方法。在易位中字母不變,位置改變;替換中字母改變,位置不變。凱撒密碼表就是用D代a,用E代b,……,用z代w,〔注意!〕用A帶x,用B代y,C代z。這些代替規(guī)那么也可用一張表格來(lái)表示〔所以叫“密表〞〕。1.3主要算法分析//密碼表的定義chara[26];for(inti=0;i<26;i++)a[i]=char(65+i);//明文轉(zhuǎn)化為凱撒密碼for(inth=0;h<strlen(s);h++)g[h]=int(s[h]);l=((g[h]-65)+key)%26;//凱撒密碼轉(zhuǎn)化為明文for(intv=0;v<strlen(q);v++)e[v]=int(q[v]);b=((e[v]-65)-key1+26)%26;1.4程序運(yùn)行結(jié)果1.5密碼平安性分析凱撒密碼是沒(méi)有密鑰的,即使沒(méi)有密鑰也能將它破解出來(lái),因?yàn)閯P撒移位密碼只有25種密鑰,最多就是將這25種可能性挨個(gè)檢測(cè)一下可以了,這就是我們所說(shuō)的暴力破解法。也可在用軟件破解,不過(guò)我提倡用人工的。推理的方法:1、對(duì)于有空格的凱撒移位,單字母A和I是突破口,這無(wú)異相當(dāng)于告訴了移動(dòng)的位數(shù),這樣很容易就被破解了。所以,如果我們要用凱撒密碼的話一定要去掉空格加大破解難。2、差數(shù)法有空格時(shí),而又沒(méi)有單字母A和I時(shí),這種方法很,如果我們令A(yù)=1,B=2,C=3......就是每個(gè)字母是字母的第幾個(gè),經(jīng)過(guò)移位后的單詞,每?jī)上噜彽淖帜钢g的差值不變的。如the的差值為12,3〔在這里我是用后面的一個(gè)字母減前面的一個(gè)字母,當(dāng)然你也可以用后面的一個(gè)字母減前面的一個(gè)字母〕,移動(dòng)后兩個(gè)相鄰字母的差值也將會(huì)是1,2,3。對(duì)于沒(méi)有空格的愷撒破解起來(lái)就比有空格的難一些,對(duì)于沒(méi)有空格的我們還要對(duì)密文進(jìn)行分析,找出重復(fù)出現(xiàn)的字母串,然后對(duì)字母串進(jìn)行猜想,例,如果有3個(gè)字母串,出現(xiàn)的次數(shù)比擬高,我們就可以假設(shè)它為the因?yàn)?個(gè)字母串出現(xiàn)次最多的就是the,當(dāng)然這不是一成不變的,這時(shí)應(yīng)該就被破解了。序列密碼—RC42.1RC4算法概述RC4加密算法是大名鼎鼎的RSA三人組中的頭號(hào)人物RonRivest在1987年設(shè)計(jì)的密鑰長(zhǎng)度可變的流加密算法簇。之所以稱(chēng)其為簇,是由于其核心局部的S-box長(zhǎng)度可為任意,但一般為256字節(jié)。該算法的速度可以到達(dá)DES加密的10倍左右。RC4算法是一種在電子信息領(lǐng)域加密的技術(shù)手段,用于無(wú)線通信網(wǎng)絡(luò),是一種電子密碼,只有經(jīng)過(guò)授權(quán)〔繳納相應(yīng)費(fèi)用〕的用戶才能享受該效勞。RC4算法的原理很簡(jiǎn)單,包括初始化算法和偽隨機(jī)子密碼生成算法兩大局部。2.2算法原理及設(shè)計(jì)思想RC4流密碼是一種可變密鑰長(zhǎng)度、面向字節(jié)操作流密碼。以隨機(jī)置換為根底。廣泛的用于SSL/TLS標(biāo)準(zhǔn)當(dāng)中。RC4算法可以分為兩個(gè)局部,第一是依據(jù)種子密鑰,利用密鑰調(diào)度算法對(duì)數(shù)據(jù)表S進(jìn)行重新排列,第二局部是利用偽隨機(jī)數(shù)生成算法,從已重新排列的數(shù)據(jù)表S中取出一個(gè)字節(jié)。每取出一個(gè)字節(jié),數(shù)據(jù)表S將發(fā)生變化。RC4描述起來(lái)也很簡(jiǎn)單:用從1到256個(gè)字節(jié)(8-2048比特)的可變長(zhǎng)度密鑰初始化一個(gè)256字節(jié)的狀態(tài)向量S,S的元素標(biāo)記為S[0],S[1],…,S[255],從始至終置換后的S包含從0-255的所有8比特?cái)?shù)。對(duì)于加密和解密,字節(jié)K由S中255個(gè)元素按照一定的方式選出一個(gè)元素生成。每生成一個(gè)K值,S中元素的個(gè)體就被重新置換一次。2.3程序主要算法分析初始化S開(kāi)始時(shí),S中的值被置為按升序0-255,即S[0]=0,S[1]=1,…,S[255]=255。同時(shí)建立一個(gè)臨時(shí)變量T。如果密鑰K的長(zhǎng)度為256字節(jié),那么將K賦給T。否那么假設(shè)密鑰長(zhǎng)度為keylen字節(jié),那么將K的值賦給T的前keylen個(gè)元素,并循環(huán)重復(fù)用K的值賦給T剩下的元素,直到T的所有元素被賦值。然后用T產(chǎn)生的S初始置換,從S[0]到S[255],對(duì)每個(gè)S[i],根據(jù)T[i]確定的方案,將S[i]置換為S中的另一字節(jié)。因?yàn)閷?duì)S的操作僅僅為交換,所以唯一的改變就是置換。S仍然包含所有值0-255的元素。voidrc4_setup(structrc4_state*s,unsignedchar*key,intlength)

{inti,j,k,*m,a;s->x=0;

s->y=0;

m=s->m;for(i=0;i<256;i++)

{m[i]=i;

}j=k=0;for(i=0;i<256;i++)

{a=m[i];j=(unsignedchar)(j+a+key[k]);m[i]=m[j];m[j]=a;if(++k>=length)k=0;

}

}密鑰流的生成向量S一旦初始化完成,輸入密鑰就不再被使用。密鑰流的生成是從S[0]到S[255],對(duì)每個(gè)S[i],根據(jù)當(dāng)前S的值,將S[i]與S中的另一字節(jié)置換。當(dāng)S[255]完成置換后,操作繼續(xù)重復(fù)從S[0]開(kāi)始。加密中,將k的值與下一明文字節(jié)異或;解密中,將k的值與下一密文字節(jié)異或。voidrc4_crypt(structrc4_state*s,unsignedchar*data,intlength)

{inti,x,y,*m,a,b;x=s->x;

y=s->y;

m=s->m;for(i=0;i<length;i++)

{x=(unsignedchar)(x+1);a=m[x];y=(unsignedchar)(y+a);m[x]=b=m[y];m[y]=a;data[i]^=m[(unsignedchar)(a+b)];

}s->x=x;

s->y=y;

}2.4程序運(yùn)行結(jié)果2.5算法分析RC4算法的優(yōu)點(diǎn)是:算法簡(jiǎn)單、高效,特別適合軟件實(shí)現(xiàn),RC4是目前應(yīng)用最廣的商密級(jí)序列密碼,目前被用于SSL/TLS標(biāo)準(zhǔn)中。由于RC4算法加密是采用的xor,所以,一旦子密鑰序列出現(xiàn)了重復(fù),密文就有可能被破解。那么,RC4算法生成的子密鑰序列是否會(huì)出現(xiàn)重復(fù)呢?經(jīng)過(guò)我的測(cè)試,存在局部弱密鑰,使得子密鑰序列在不到100萬(wàn)字節(jié)內(nèi)就發(fā)生了完全的重復(fù),如果是局部重復(fù),那么可能在不到10萬(wàn)字節(jié)內(nèi)就能發(fā)生重復(fù),因此,推薦在使用RC4算法時(shí),必須對(duì)加密密鑰進(jìn)行測(cè)試,判斷其是否為弱密鑰。但在2001年就有以色列科學(xué)家指出RC4加密算法存在著漏洞,這可能對(duì)無(wú)線通信網(wǎng)絡(luò)的平安構(gòu)成威脅。以色列魏茨曼研究所和美國(guó)思科公司的研究者發(fā)現(xiàn),在使用“有線等效保密規(guī)那么〞〔WEP〕的無(wú)線網(wǎng)絡(luò)中,在特定情況下,人們可以逆轉(zhuǎn)RC4算法的加密過(guò)程,獲取密鑰,從而將己加密的信息解密。實(shí)現(xiàn)這一過(guò)程并不復(fù)雜,只需要使用一臺(tái)個(gè)人電腦對(duì)加密的數(shù)據(jù)進(jìn)行分析,經(jīng)過(guò)幾個(gè)小時(shí)的時(shí)間就可以破譯出信息的全部?jī)?nèi)容。專(zhuān)家說(shuō),這并不表示所有使用RC4算法的軟件都容易泄密,但它意味著RC4算法并不像人們?cè)日J(rèn)為的那樣平安。這一發(fā)現(xiàn)可能促使人們重新設(shè)計(jì)無(wú)線通信網(wǎng)絡(luò),并且使用新的加密算法。分組密碼DES加解密算法的實(shí)現(xiàn)DES加解密算法概述1977年1月,美國(guó)政府公布:采納IBM公司設(shè)計(jì)的方案作為非機(jī)密數(shù)據(jù)的正式數(shù)據(jù)加密標(biāo)準(zhǔn)〔DESDataEncryptionStandard〕。DES算法在POS、ATM、磁卡及智能卡〔IC卡〕、加油站、高速公路收費(fèi)站等領(lǐng)域被廣泛應(yīng)用,以此來(lái)實(shí)現(xiàn)關(guān)鍵數(shù)據(jù)的保密,如信用卡持卡人的PIN的加密傳輸,IC卡與POS間的雙向認(rèn)證、金融交易數(shù)據(jù)包的MAC校驗(yàn)等,均用到DES算法。DES算法的入口參數(shù)有三個(gè):Key、Data、Mode。其中Key為8個(gè)字節(jié)共64位,是DES算法的工作密鑰;Data也為8個(gè)字節(jié)64位,是要被加密或被解密的數(shù)據(jù);Mode為DES的工作方式,有兩種:加密或解密。DES是一個(gè)分組密碼算法,它使用56位的密鑰,以64位為單位對(duì)數(shù)據(jù)分組進(jìn)行加密解密〔密文和明文的分組長(zhǎng)度相同,均為64位〕,DES加密與解密使用同一密鑰,DES的保密性依賴于密鑰。DES的加密過(guò)程可簡(jiǎn)單描述為三個(gè)階段:算法原理及設(shè)計(jì)思想DES算法把64位的明文輸入塊變?yōu)?4位的密文輸出塊,它所使用的密鑰也是64位,其功能是把輸入的64位數(shù)據(jù)塊按位重新組合,并把輸出分為L(zhǎng)0、R0兩局部,每局部各長(zhǎng)32位,其置換規(guī)那么見(jiàn)下表:58,50,12,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,23,15,7,即將輸入的第58位換到第一位,第50位換到第2位,……,依此類(lèi)推,最后一位是原來(lái)的第7位。L0、R0那么是換位輸出后的兩局部,L0是輸出的左32位,R0是右32位,例:設(shè)置換前的輸入值為D1D2D3……D64,那么經(jīng)過(guò)初始置換后的結(jié)果為:L0=D550……D8;R0=D57D49...D7。經(jīng)過(guò)26次迭代運(yùn)算后,得到L16、R16,將此作為輸入,進(jìn)行逆置換,即得到密文輸出。逆置換正好是初始置的逆運(yùn)算,例如,第1位經(jīng)過(guò)初始置換后,處于第40位,而通過(guò)逆置換,又將第40位換回到第1位,其逆置換規(guī)那么如下表所示: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,5826,33,1,41,9,49,17,57,25,放大換位表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,27,28,29,28,29,30,31,32,1,單純換位表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,在f(Ri,Ki)算法描述圖中,S1,S2...S8為選擇函數(shù),其功能是把6bit數(shù)據(jù)變?yōu)?bit數(shù)據(jù)。下面給出選擇函數(shù)Si(i=1,2......8)的功能表:選擇函數(shù)SiS1: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,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,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,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,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,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,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,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,加密流程圖如下所示:密鑰生成過(guò)程1、子密鑰Ki(48bit)的生成算法初始Key值為64位,但DES算法規(guī)定,其中第8、16、......64位是奇偶校驗(yàn)位,不參與DES運(yùn)算。故Key實(shí)際可用位數(shù)便只有56位。即:經(jīng)過(guò)縮小選擇換位表1的變換后,Key的位數(shù)由64位變成了56位,此56位分為C0、D0兩局部,各28位,然后分別進(jìn)行第1次循環(huán)左移,得到C1、D1,將C1〔28位〕、D1〔28位〕合并得到56位,再經(jīng)過(guò)縮小選擇換位2,從而便得到了密鑰K0〔48位〕。依此類(lèi)推,便可得到K1、K2、......、K15,不過(guò)需要注意的是,16次循環(huán)左移對(duì)應(yīng)的左移位數(shù)要依據(jù)下述規(guī)那么進(jìn)行:循環(huán)左移位數(shù)1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1以上介紹了DES算法的加密過(guò)程。DES算法的解密過(guò)程是一樣的,區(qū)別僅僅在于第一次迭代時(shí)用子密鑰K15,第二次K14、……,最后一次用K0,算法本身并沒(méi)有任何變化。密鑰生成過(guò)程流程圖如下所示:3.1.3程序主要算法分析〔1〕S盒功能通過(guò)以下函數(shù)來(lái)實(shí)現(xiàn),將48位的輸入轉(zhuǎn)換成32位的輸出如下所示:voidS_func(boolOut[32],constboolIn[48])//將48位轉(zhuǎn)換成32位{intj,m,n;//膨脹后的比特串分為8組,每組6比特。for(j=0;j<8;j++,In+=6,Out+=4){m=(In[0]*2)+In[5];n=(In[1]*8)+(In[2]*4)+(In[3]*2)+In[4];ByteToBit(Out,&SBox[j][m][n],4);}}〔2〕函數(shù)F包括擴(kuò)展置換,與子密鑰異或,S盒變換及P盒變換,輸入為32位,產(chǎn)生48位的中間結(jié)果,并最終產(chǎn)生32比特的輸出voidF_func(boolIn[32],constboolKi[48]){staticboolMR[48];Transform(MR,In,EC,48);Xor(MR,Ki,48);//膨脹后的比特串分為8組,每組6比特。各組經(jīng)過(guò)各自的S盒后,又變?yōu)?比特,合并后又成為32比特。S_func(In,MR);//該32比特經(jīng)過(guò)P變換后,輸出的比特串才是32比特的f(Ri-1,Ki)Transform(In,In,PP,32);}〔3〕下面為子密鑰生成函數(shù),輸入的種子密鑰首先經(jīng)過(guò)PC-1置換,將奇偶校驗(yàn)位刪除,且剩余的56位密鑰打亂重排然后再生成子密鑰,具體過(guò)程如下所示:voidSetKey(charkey[8])//生成子密鑰{inti;staticboolK[64],*KL=&K[0],*KR=&K[28];ByteToBit(K,key,64);//轉(zhuǎn)換為二進(jìn)制Transform(K,K,EP1,56);//64比特的密鑰K,經(jīng)過(guò)EP1后,生成56比特的串。//生成16個(gè)子密鑰for(i=0;i<16;i++){//循環(huán)左移,合并RotateL(KL,28,LOOP[i]);RotateL(KR,28,LOOP[i]);Transform(SubKey[i],K,EP2,48);}}〔4〕下面為加密函數(shù):voidCDES::Encryption(charout[8],charIn[8])//加密函數(shù){ByteToBit(M,In,64);//轉(zhuǎn)換為二進(jìn)制Transform(M,M,IP,64);for(inti=0;i<16;i++){memcpy(tmp,Ri,32);F_func(Ri,SubKey[i]);Xor(Ri,Li,32);//將所得結(jié)果與明文的左32位進(jìn)行異或memcpy(Li,tmp,32);//將明文的左右32位交換}Transform(M,M,LP,64);BitToByte(out,M,64);//return(out);}〔5〕下面為解密函數(shù),實(shí)際上是加密的一個(gè)逆運(yùn)算:voidCDES::Decryption(charout[8],charIn[8])//解密函數(shù)(加密的逆過(guò)程){ByteToBit(M,In,64);//轉(zhuǎn)換為二進(jìn)制Transform(M,M,IP,64);for(inti=15;i>=0;i--){memcpy(tmp,Li,32);F_func(Li,SubKey[i]);Xor(Li,Ri,32);memcpy(Ri,tmp,32);}Transform(M,M,LP,64);BitToByte(out,M,64);//return(out);}程序的運(yùn)行結(jié)果為:程序總的流程圖如下所示:平安性分析對(duì)DES平安性的主要爭(zhēng)論:〔1〕、對(duì)DES的S盒、迭代次數(shù)、密鑰長(zhǎng)度等設(shè)計(jì)準(zhǔn)那么的爭(zhēng)議〔2〕、DES存在著一些弱密鑰和半弱密鑰〔3〕、DES的56位密鑰無(wú)法抵抗窮舉工具對(duì)于DES算法可以利用互補(bǔ)性、弱密鑰和半弱密鑰、密鑰搜索、差分分析和線性分析等方式進(jìn)行攻擊。對(duì)于DES密碼也可使用窮舉密鑰攻擊,n=256≈7×106,即使使用每秒種可以計(jì)算一百萬(wàn)個(gè)密鑰的大型計(jì)算機(jī),也需要算106天才能求得所使用的密鑰,因此看來(lái)是很平安的。但是密碼專(zhuān)家Diffie和Hellman指出,如果設(shè)計(jì)一種一微秒可以核算一個(gè)密鑰的超大規(guī)模集成片,那么它在一天內(nèi)可以核算8.64×1010個(gè)密鑰。如果由一個(gè)百萬(wàn)個(gè)這樣的集成片構(gòu)成專(zhuān)用機(jī),他們當(dāng)時(shí)估計(jì):這種專(zhuān)用機(jī)的造價(jià)約為兩千萬(wàn)美元。在五年內(nèi)分期歸還,平均每天約需付一萬(wàn)美元。由于用窮舉法破譯平均只需要計(jì)算半個(gè)密鑰空間,因此獲得解的平均時(shí)間為半天。為保證DES的平安性,又出現(xiàn)了2DES,三重DES等。AES加解密算法的實(shí)現(xiàn)AES算法概述AES加密算法即密碼學(xué)中的高級(jí)加密標(biāo)準(zhǔn)〔AdvancedEncryptionStandard,AES〕,又稱(chēng)Rijndael加密法,是美國(guó)聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)用來(lái)替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。經(jīng)過(guò)五年的甄選流程,高級(jí)加密標(biāo)準(zhǔn)由美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院〔NIST〕于2001年11月26日發(fā)布于FIPSPUB197,并在2002年5月26日成為有效的標(biāo)準(zhǔn)。AES的根本要求是,采用對(duì)稱(chēng)分組密碼體制,密鑰長(zhǎng)度的最少支持為128、192、256,分組長(zhǎng)度128位,AES加密數(shù)據(jù)塊大小最大是256bit,但是密鑰大小在理論上沒(méi)有上限。AES加密有很多輪的重復(fù)和變換。大致步驟如下:1、密鑰擴(kuò)展〔KeyExpansion〕,2、初始輪〔InitialRound〕,3、重復(fù)輪〔Rounds〕,每一輪又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最終輪〔FinalRound〕,最終輪沒(méi)有MixColumns。算法原理及設(shè)計(jì)思想AES算法基于排列和置換運(yùn)算。排列是對(duì)數(shù)據(jù)重新進(jìn)行安排,置換是將一個(gè)數(shù)據(jù)單元替換為另一個(gè)。AES使用幾種不同的方法來(lái)執(zhí)行排列和置換運(yùn)算。

AES是一個(gè)迭代的、對(duì)稱(chēng)密鑰分組的密碼,它可以使用128、192和256位密鑰,并且用128位〔16字節(jié)〕分組加密和解密數(shù)據(jù)。與公共密鑰密碼使用密鑰對(duì)不同,對(duì)稱(chēng)密鑰密碼使用相同的密鑰加密和解密數(shù)據(jù)。通過(guò)分組密碼返回的加密數(shù)據(jù)的位數(shù)與輸入數(shù)據(jù)相同。迭代加密使用一個(gè)循環(huán)結(jié)構(gòu),在該循環(huán)中重復(fù)置換和替換輸入數(shù)據(jù)?!?〕首先將明文以字節(jié)為單位進(jìn)行處理,以128位分組、128位的密鑰為例。先將明文按字節(jié)分成列組,將明文的前四字節(jié)組成一列,接下來(lái)的4個(gè)字節(jié)組成第二列,后面的字節(jié)依次組成第三列和第四列,那么組成了一個(gè)4乘4的矩陣?!?〕AES也是由根本的變換單位“輪〞屢次迭代而成的。AES的輪變換由四個(gè)不同的變換組成:字節(jié)代替變換非線性的字節(jié)替代,單獨(dú)處理每個(gè)字節(jié):求該字節(jié)在有限域GF(28)上的乘法逆,"0"被映射為自身,即對(duì)于α∈GF(28),求β∈GF(28),使得α·β=β·α=1mod(x8+x4+x2+x+1)。對(duì)上一步求得的乘法逆作仿射變換yi=xi+x(i+4)mod8+x(i+6)mod8+x(i+7)mod8+ci(其中ci是6310即011000112的第i位〕2)行移位變換行移位變換完成基于行的循環(huán)位移操作,變換方法:

即行移位變換作用于行上,第0行不變,第1行循環(huán)左移1個(gè)字節(jié),第2行循環(huán)左移2個(gè)字節(jié),第3行循環(huán)左移3個(gè)字節(jié)。列混合變換〔最后一輪中沒(méi)有〕逐列混合,方法:b(x)=(03·x3+01·x2+01·x+02)·a(x)mod(x4+1)矩陣表示形式:與子密鑰異或只是簡(jiǎn)單的將密鑰按位異或到一個(gè)狀態(tài)上。每輪加密密鑰按順序取自擴(kuò)展密鑰,擴(kuò)展密鑰是由初始密鑰擴(kuò)展而成。密鑰擴(kuò)展AES密鑰擴(kuò)展算法輸入值是4字(16字節(jié)),輸出值是一個(gè)44字(176字節(jié))的一維線性數(shù)組,為初始輪密鑰加階段和其他10輪中的每一輪提供4字的輪秘密鑰,輸入密鑰直接被復(fù)制到擴(kuò)展密鑰數(shù)組的前四個(gè)字,然后每次用四個(gè)字填充擴(kuò)展密鑰數(shù)組余下的局部程序主要算法分析〔1〕程序編寫(xiě)的過(guò)程中嚴(yán)格按照AES算法的執(zhí)行過(guò)程,將用到的參數(shù)及函數(shù)封裝在AES類(lèi)中,再進(jìn)行調(diào)用,如下所示:classAES{public:AES(unsignedchar*key);virtual~AES();unsignedchar*Cipher(unsignedchar*input);unsignedchar*InvCipher(unsignedchar*input);void*Cipher(void*input,intlength=0);void*InvCipher(void*input,intlength);private:unsignedcharSbox[256];unsignedcharInvSbox[256];unsignedcharw[11][4][4];voidKeyExpansion(unsignedchar*key,unsignedcharw[][4][4]);unsignedcharFFmul(unsignedchara,unsignedcharb);voidSubBytes(unsignedcharstate[][4]);voidShiftRows(unsignedcharstate[][4]);voidMixColumns(unsignedcharstate[][4]);voidAddRoundKey(unsignedcharstate[][4],unsignedchark[][4]);voidInvSubBytes(unsignedcharstate[][4]);voidInvShiftRows(unsignedcharstate[][4]);voidInvMixColumns(unsignedcharstate[][4]);};〔2〕先將輸入的明文按列序組合成4*4的矩陣,直接與第0組密鑰〔即輸入的密鑰〕相加〔異或〕,作為輪加密的輸入然后循環(huán)10次進(jìn)行SubBytes、ShiftRows、MixColumns、AddRoundKey運(yùn)算,最后恢復(fù)原序列〔3〕需要注意的是最后一輪并不進(jìn)行MixColumns〔列混淆變換〕加密過(guò)程函數(shù)Cipher,它只有一個(gè)參數(shù),為輸入的明文,函數(shù)的返回值為加密之后的密文,解密過(guò)程與加密過(guò)程類(lèi)似。unsignedchar*AES::Cipher(unsignedchar*input){unsignedcharstate[4][4];inti,r,c;//將明文按字節(jié)分成列組for(r=0;r<4;r++){for(c=0;c<4;c++){state[r][c]=input[c*4+r];} }AddRoundKey(state,w[0]);for(i=1;i<=10;i++) {SubBytes(state);//字節(jié)代替ShiftRows(state);//行移位if(i!=10)MixColumns(state);//列混合〔最后一輪除外〕AddRoundKey(state,w[i]);//與子密鑰異或 }for(r=0;r<4;r++){for(c=0;c<4;c++){input[c*4+r]=state[r][c];}}returninput;}〔4〕下面是每一輪變換中的四個(gè)小變換的實(shí)現(xiàn)函數(shù)如下://字節(jié)代替,通過(guò)SBox表來(lái)實(shí)現(xiàn)的;voidAES::SubBytes(unsignedcharstate[][4]){intr,c;for(r=0;r<4;r++) {for(c=0;c<4;c++) {state[r][c]=Sbox[state[r][c]]; } }}//行移位作用于行上,第0行不變,第1行循環(huán)左移1個(gè)字節(jié),第2行循環(huán)左移2個(gè)字節(jié),第3行循環(huán)左移3個(gè)字節(jié)。voidAES::ShiftRows(unsignedcharstate[][4]){unsignedchart[4];intr,c;for(r=1;r<4;r++) {for(c=0;c<4;c++) {t[c]=state[r][(c+r)%4]; }for(c=0;c<4;c++) {state[r][c]=t[c]; } }}//列混合FFmul為有限域GF(28)上的乘法,標(biāo)準(zhǔn)算法應(yīng)該是循環(huán)8次〔b與a的每一位相乘,結(jié)果相加〕,但這里只用到最低2位,解密時(shí)用到的逆列混淆也只用了低4位,所以在這里高4位的運(yùn)算是多余的,只計(jì)算低4位。voidAES::MixColumns(unsignedcharstate[][4]){unsignedchart[4];intr,c;for(c=0;c<4;c++) {for(r=0;r<4;r++) {t[r]=state[r][c]; }for(r=0;r<4;r++) {state[r][c]=FFmul(0x02,t[r]) ^FFmul(0x03,t[(r+1)%4]) ^FFmul(0x01,t[(r+2)%4]) ^FFmul(0x01,t[(r+3)%4]); } }}//與子密鑰異或voidAES::AddRoundKey(unsignedcharstate[][4],unsignedchark[][4]){intr,c;for(c=0;c<4;c++) {for(r=0;r<4;r++) { state[r][c]^=k[r][c];//異或運(yùn)算 } }}//密鑰擴(kuò)展//將前一列即第n-1組第三列的四個(gè)字節(jié)循環(huán)左移1個(gè)字節(jié),并對(duì)每個(gè)字節(jié)進(jìn)行字節(jié)代替變換SubBytes,將第一行(即第一個(gè)字節(jié))與輪常量rc[n]相加,最后再與前一組該列相加voidAES::KeyExpansion(unsignedchar*key,unsignedcharw[][4][4]){Inti,j,r,c; unsignedcharrc[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x1b,0x36};for(r=0;r<4;r++) {for(c=0;c<4;c++) {w[0][r][c]=key[r+c*4]; } }for(i=1;i<=10;i++) {for(j=0;j<4;j++) {unsignedchart[4];for(r=0;r<4;r++) {t[r]=j?w[i][r][j-1]:w[i-1][r][3]; }if(j==0) {unsignedchartemp=t[0];for(r=0;r<3;r++) {t[r]=Sbox[t[(r+1)%4]]; }t[3]=Sbox[temp];t[0]^=rc[i-1]; }for(r=0;r<4;r++) {w[i][r][j]=w[i-1][r][j]^t[r]; } } }}3.2.4程序運(yùn)行結(jié)果輸入為數(shù)字3.2.5平安性分析暴力攻擊單就密鑰長(zhǎng)度來(lái)看,AES里面最少128位的密鑰絕比照DES的56位密鑰要平安的多統(tǒng)計(jì)攻擊已經(jīng)有很多的測(cè)試都無(wú)法對(duì)AES所產(chǎn)生的密文進(jìn)行統(tǒng)計(jì)攻擊差分攻擊與線性攻擊AES系統(tǒng)目前仍然沒(méi)有任何的差分攻擊或者線性攻擊存在。HASH函數(shù)—MD5算法4.1算法概述MessageDigestAlgorithmMD5〔中文名為消息摘要算法第五版〕為計(jì)算機(jī)平安領(lǐng)域廣泛使用的一種散列函數(shù),用以提供消息的完整性保護(hù)。是計(jì)算機(jī)廣泛使用的雜湊算法之一〔又譯摘要算法、哈希算法〕,將數(shù)據(jù)〔如漢字〕運(yùn)算為另一固定長(zhǎng)度值,是雜湊算法的根底原理,MD5的作用是讓大容量信息在用數(shù)字簽名軟件簽署私人密鑰前被"壓縮"成一種保密的格式〔就是把一個(gè)任意長(zhǎng)度的字節(jié)串變換成一定長(zhǎng)的十六進(jìn)制數(shù)字串〕。除了MD5以外,其中比擬有名的還有sha-1、RIPEMD以及Haval等。4.2算法原理及設(shè)計(jì)思想MD5以512位分組來(lái)處理輸入的信息,且每一分組又被劃分為16個(gè)32位子分組,經(jīng)過(guò)了一系列的處理后,算法的輸出由四個(gè)32位分組組成,將這四個(gè)32位分組級(jí)聯(lián)后將生成一個(gè)128位散列值。在MD5算法中,首先需要對(duì)信息進(jìn)行填充,使其位長(zhǎng)對(duì)512求余的結(jié)果等于448。因此,信息的位長(zhǎng)〔BitsLength〕將被擴(kuò)展至N*512+448,N為一個(gè)非負(fù)整數(shù),N可以是零。填充的方法如下,在信息的后面填充一個(gè)1和無(wú)數(shù)個(gè)0,直到滿足上面的條件時(shí)才停止用0對(duì)信息的填充。然后,在這個(gè)結(jié)果后面附加一個(gè)以64位二進(jìn)制表示的填充前信息長(zhǎng)度。經(jīng)過(guò)這兩步的處理,現(xiàn)在的信息的位長(zhǎng)=N*512+448+64=(N+1)*512,即長(zhǎng)度恰好是512的整數(shù)倍。這樣做的原因是為滿足后面處理中對(duì)信息長(zhǎng)度的要求。MD5中有四個(gè)32位被稱(chēng)作鏈接變量〔ChainingVariable〕的整數(shù)參數(shù),他們分別為:A=0x67452301,B=0xefcdab89,C=0x98badcfe,D=0x10325476。當(dāng)設(shè)置好這四個(gè)鏈接變量后,就開(kāi)始進(jìn)入算法的四輪循環(huán)運(yùn)算。循環(huán)的次數(shù)是信息中512位信息分組的數(shù)目。將上面四個(gè)鏈接變量復(fù)制到另外四個(gè)變量中:A到a,B到b,C到c,D到d。主循環(huán)有四輪〔MD4只有三輪〕,每輪循環(huán)都很相似。第一輪進(jìn)行16次操作。每次操作對(duì)a、b、c和d中的其中三個(gè)作一次非線性函數(shù)運(yùn)算,然后將所得結(jié)果加上第四個(gè)變量,文本的一個(gè)子分組和一個(gè)常數(shù)。再將所得結(jié)果向左環(huán)移一個(gè)不定的數(shù),并加上a、b、c或d中之一。最后用該結(jié)果取代a、b、c或d中之一。以下是每次操作中用到的四個(gè)非線性函數(shù)〔每輪一個(gè)〕。F(X,Y,Z)=(X&Y)|((~X)&Z)G(X,Y,Z)=(X&Z)|(Y&(~Z))H(X,Y,Z)=X^Y^ZI(X,Y,Z)=Y^(X|(~Z))〔&是與,|是或,~是非,^是異或〕這四個(gè)函數(shù)的說(shuō)明:如果X、Y和Z的對(duì)應(yīng)位是獨(dú)立和均勻的,那么結(jié)果的每一位也應(yīng)是獨(dú)立和均勻的。F是一個(gè)逐位運(yùn)算的函數(shù)。即,如果X,那么Y,否那么Z。函數(shù)H是逐位奇偶操作符。假設(shè)Mj表示消息的第j個(gè)子分組〔從0到15〕,常數(shù)ti是4294967296*abs(sin(i))的整數(shù)局部,i取值從1到64,單位是弧度。(4294967296等于2的32次方)FF(a,b,c,d,Mj,s,ti)表示a=b+((a+F(b,c,d)+Mj+ti)<<s)GG(a,b,c,d,Mj,s,ti)表示a=b+((a+G(b,c,d)+Mj+ti)<<s)HH(a,b,c,d,Mj,s,ti)表示a=b+((a+H(b,c,d)+Mj+ti)<<s)II(a,b,c,d,Mj,s,ti)表示a=b+((a+I(b,c,d)+Mj+ti)<<s)這四輪〔64步〕是:第一輪FF(a,b,c,d,M0,7,0xd76aa478)FF(d,a,b,c,M1,12,0xe8c7b756)FF(c,d,a,b,M2,17,0x242070db)FF(b,c,d,a,M3,22,0xc1bdceee)FF(a,b,c,d,M4,7,0xf57c0faf)FF(d,a,b,c,M5,12,0x4787c62a)FF(c,d,a,b,M6,17,0xa8304613)FF(b,c,d,a,M7,22,0xfd469501)FF(a,b,c,d,M8,7,0x698098d8)FF(d,a,b,c,M9,12,0x8b44f7af)FF(c,d,a,b,M10,17,0xffff5bb1)FF(b,c,d,a,M11,22,0x895cd7be)FF(a,b,c,d,M12,7,0x6b901122)FF(d,a,b,c,M13,12,0xfd987193)FF(c,d,a,b,M14,17,0xa679438e)FF(b,c,d,a,M15,22,0x49b40821)第二輪GG(a,b,c,d,M1,5,0xf61e2562)GG(d,a,b,c,M6,9,0xc040b340)GG(c,d,a,b,M11,14,0x265e5a51)GG(b,c,d,a,M0,20,0xe9b6c7aa)GG(a,b,c,d,M5,5,0xd62f105d)GG(d,a,b,c,M10,9,0x02441453)GG(c,d,a,b,M15,14,0xd8a1e681)GG(b,c,d,a,M4,20,0xe7d3fbc8)GG(a,b,c,d,M9,5,0x21e1cde6)GG(d,a,b,c,M14,9,0xc33707d6)GG(c,d,a,b,M3,14,0xf4d50d87)GG(b,c,d,a,M8,20,0x455a14ed)GG(a,b,c,d,M13,5,0xa9e3e905)GG(d,a,b,c,M2,9,0xfcefa3f8)GG(c,d,a,b,M7,14,0x676f02d9)GG(b,c,d,a,M12,20,0x8d2a4c8a)第三輪HH(a,b,c,d,M5,4,0xfffa3942)HH(d,a,b,c,M8,11,0x8771f681)HH(c,d,a,b,M11,16,0x6d9d6122)HH(b,c,d,a,M14,23,0xfde5380c)HH(a,b,c,d,M1,4,0xa4beea44)HH(d,a,b,c,M4,11,0x4bdecfa9)HH(c,d,a,b,M7,16,0xf6bb4b60)HH(b,c,d,a,M10,23,0xbebfbc70)HH(a,b,c,d,M13,4,0x289b7ec6)HH(d,a,b,c,M0,11,0xeaa127fa)HH(c,d,a,b,M3,16,0xd4ef3085)HH(b,c,d,a,M6,23,0x04881d05)HH(a,b,c,d,M9,4,0xd9d4d039)HH(d,a,b,c,M12,11,0xe6db99e5)HH(c,d,a,b,M15,16,0x1fa27cf8)HH(b,c,d,a,M2,23,0xc4ac5665)第四輪II(a,b,c,d,M0,6,0xf4292244)II(d,a,b,c,M7,10,0x432aff97)II(c,d,a,b,M14,15,0xab9423a7)II(b,c,d,a,M5,21,0xfc93a039)II(a,b,c,d,M12,6,0x655b59c3)II(d,a,b,c,M3,10,0x8f0ccc92)II(c,d,a,b,M10,15,0xffeff47d)II(b,c,d,a,M1,21,0x85845dd1)II(a,b,c,d,M8,6,0x6fa87e4f)II(d,a,b,c,M15,10,0xfe2ce6e0)II(c,d,a,b,M6,15,0xa3014314)II(b,c,d,a,M13,21,0x4e0811a1)II(a,b,c,d,M4,6,0xf7537e82)II(d,a,b,c,M11,10,0xbd3af235)II(c,d,a,b,M2,15,0x2ad7d2bb)II(b,c,d,a,M9,21,0xeb86d391)所有這些完成之后,將A、B、C、D分別加上a、b、c、d。然后用下一分組數(shù)據(jù)繼續(xù)運(yùn)行算法,最后的輸出是A、B、C和D的級(jí)聯(lián)。主要過(guò)程如下所示:程序主要算法分析〔1〕MD5壓縮函數(shù)要經(jīng)過(guò)四輪處理過(guò)程,四輪處理過(guò)程中使用的根本邏輯函數(shù)在程序的開(kāi)始做出聲明,每個(gè)函數(shù)的輸入是三個(gè)32位的字,輸出是一個(gè)32位的字。#defineF(x,y,z)(((x)&(y))|((~x)&(z)))#defineG(x,y,z)(((x)&(z))|((y)&(~z)))#defineH(x,y,z)((x)^(y)^(z))#defineI(x,y,z)((y)^((x)|(~z)))〔2〕對(duì)應(yīng)于四輪的根本操作即移位操作函數(shù)如下:#defineFF(a,b,c,d,x,s,ac){ (a)+=F((b),(c),(d))+(x)+ac; (a)=ROTATE_LEFT((a),(s)); (a)+=(b);}#defineGG(a,b,c,d,x,s,ac){ (a)+=G((b),(c),(d))+(x)+ac; (a)=ROTATE_LEFT((a),(s)); (a)+=(b);}#defineHH(a,b,c,d,x,s,ac){(a)+=H((b),(c),(d))+(x)+ac;(a)=ROTATE_LEFT((a),(s));(a)+=(b);}#defineII(a,b,c,d,x,s,ac){ (a)+=I((b),(c),(d))+(x)+ac; (a)=ROTATE_LEFT((a),(s)); (a)+=(b);}〔3〕更新輸入,即消息的填充和添加消息長(zhǎng)度:voidMD5::update(constbyte*input,size_tlength){uint32i,index,partLen; _finished=false;index=(uint32)((_count[0]>>3)&0x3f);if((_count[0]+=((uint32)length<<3))<((uint32)length<<3){++_count[1]; } _count[1]+=((uint32)length>>29);partLen=64-index;//計(jì)算已有的消息的bits長(zhǎng)度的字節(jié)數(shù)的模//用于判斷已有消息加上當(dāng)前傳過(guò)來(lái)的消息總長(zhǎng)度能不能到達(dá)512bits,如果能夠到達(dá)那么對(duì)湊夠的512bits進(jìn)行一次處理if(length>=partLen){memcpy(&_buffer[index],input,partLen);transform(_buffer);//對(duì)當(dāng)前輸入的剩余字節(jié)做轉(zhuǎn)換for(i=partLen;i+63<length;i+=64){transform(&input[i]); }index=0; }else{i=0; }memcpy(&_buffer[index],&input[i],length-i);}〔4〕獲取加密的最終結(jié)果:voidMD5::final(){bytebits[8];uint32oldState[4];uint32oldCount[2];uint32index,padLen; //保存當(dāng)前狀態(tài)memcpy(oldState,_state,16);memcpy(oldCount,_count,8);//將要被轉(zhuǎn)換的信息的bits長(zhǎng)度拷貝到bits中encode(_count,bits,8);//計(jì)算所有的bits長(zhǎng)度的字節(jié)數(shù)的模64index=(uint32)((_count[0]>>3)&0x3f);//計(jì)算需要填充的字節(jié)數(shù),padLen的取值范圍在1-64之間padLen=(index<56)?(56-index):(120-index);//這一次函數(shù)笤俑絕對(duì)不會(huì)再導(dǎo)致MD5Transform的被調(diào)用,因?yàn)檫@一次不會(huì)填滿512bitsupdate(PADDING,padLen);update(bits,8); //將結(jié)果保存到digest中encode(_state,_digest,16);memcpy(_state,oldState,16);memcpy(_count,oldCount,8);}程序運(yùn)行結(jié)果如下所示平安性分析MD5算法中,輸出的每一位都是輸入的每一位的函數(shù),邏輯函數(shù)F、G、H、I的復(fù)雜迭代使得輸出對(duì)輸入的依賴非常小。但是,Berson已經(jīng)證明,對(duì)單輪的MD5算法,利用差分密碼分析,可以在合理時(shí)間內(nèi)找出摘要相同的兩條報(bào)文。MD5算法抗密碼分析的能力較弱,對(duì)MD5的生日攻擊所需代價(jià)是需要試驗(yàn)264個(gè)消息。2004年8月17日,在美國(guó)加州圣巴巴拉召開(kāi)的美密會(huì)〔Crypto2004〕上,中國(guó)的王小云、馮登國(guó)、來(lái)學(xué)嘉、于紅波4位學(xué)者宣布,只需1小時(shí)就可找出MD5的碰撞?!怖貌罘址治觥彻€密碼算法--RSA5.1算法概述MIT三位年青數(shù)學(xué)家,A.Shamir和L.Adleman在1978年發(fā)現(xiàn)了一種用數(shù)論構(gòu)造雙鑰體制的方法,稱(chēng)作MIT體制,后來(lái)被廣泛稱(chēng)之為RSA體制。它既可用于加密、又可用于數(shù)字簽名。RSA算法的平安性基于數(shù)論中大整數(shù)分解的困難性。RSA算法,它通常是先生成一對(duì)RSA密鑰,其中之一是保密密鑰,由用戶保存;另一個(gè)為公開(kāi)密鑰,可對(duì)外公開(kāi),甚至可在網(wǎng)絡(luò)效勞器中注冊(cè)。為提高保密強(qiáng)度,RSA密鑰至少為500位長(zhǎng),一般推薦使用1024位。這就使加密的計(jì)算量很大。為減少計(jì)算量,在傳送信息時(shí),常采用傳統(tǒng)加密方法與公開(kāi)密鑰加密方法相結(jié)合的方式,即信息采用改良的DES或IDEA對(duì)話密鑰加密,然后使用RSA密鑰加密對(duì)話密鑰和信息摘要。對(duì)方收到信息后,用不同的密鑰解密并可核對(duì)信息摘要。RSA算法是第一個(gè)能同時(shí)用于加密和數(shù)字簽名的算法,也易于理解和操作。RSA是被研究得最廣泛的公鑰算法,從提出到現(xiàn)在的三十多年里,經(jīng)歷了各種攻擊的考驗(yàn),逐漸為人們接受,普遍認(rèn)為是目前最優(yōu)秀的公鑰方案之一。算法原理及設(shè)計(jì)思想算法描述-密鑰產(chǎn)生KG():獨(dú)立地選取兩大素?cái)?shù)p和q(各100~200位十進(jìn)制數(shù)字)計(jì)算n=p×q,其歐拉函數(shù)值(n)=(p-1)(q-1)隨機(jī)選一整數(shù)e,1e<(n),gcd((n),e)=1(4)在模(n)下,計(jì)算e的有逆元d=e-1mod(n)(5)以n,e為公鑰。私鑰為d。(p,q不再需要,可以銷(xiāo)毀。)算法描述-加密E()和解密D():(1)加密將明文分組,各組對(duì)應(yīng)的十進(jìn)制數(shù)小于nc=memodn(2)解密m=cdmodn原理:RSA算法滿足公開(kāi)密鑰加密的要求,必須符合以下條件(1)有可能找到e,d,n的值,使得對(duì)所有M<n有Medmodn=M(2)對(duì)于所有M<n的值,要計(jì)算Me和Cd是相對(duì)容易的(3)在給定e和n時(shí),計(jì)算出d是不可行的(4)幾個(gè)關(guān)系φ(n)=φ(pq)=φ(p)φ(q)=(p-1)(q-1),p,qareprimeedmodφ(n)=1,ed=kφ(n)+1,即ed≡1modφ(n),d≡e-1modφ(n)5.3程序主要算法分析//求b模a的乘法逆,擴(kuò)展Euclidian算法longdoubleinverse(longdoublea,longdoubleb){longdoublea0,b0,t0,t,q,r;//用t返回要求的a的值a0=a;b0=b;t0=0;t=1;q=floor(a0/b0);//取整r=a0-q*b0;while(r>0){longdoubletemp;temp=fmod((t0-q*t),a);t0=t;t=temp;a0=b0;b0=r;q=floor(a0/b0);r=a0-q*b0;}//選擇的b不滿足if(b0!=1)cout<<"Failed!Pleasecheckbyouentered."<<endl;//gcd(mult

溫馨提示

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