密碼學課程設(shè)計AES加密解密文檔_第1頁
密碼學課程設(shè)計AES加密解密文檔_第2頁
密碼學課程設(shè)計AES加密解密文檔_第3頁
密碼學課程設(shè)計AES加密解密文檔_第4頁
密碼學課程設(shè)計AES加密解密文檔_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、成都信息工程學院課程設(shè)計報告AES加密解密的實現(xiàn)課程名稱:應用密碼算法程序設(shè)計學生姓名:學生學號:專業(yè)班級:任課教師:附件:課程設(shè)計成績評價表指導老師評閱成績表學習與工作態(tài)度(30%)選題意義(10%)文獻綜述(10%)研究水平與設(shè)計能力(20%)課程設(shè)計說明說(論文)撰寫質(zhì)量(20%)設(shè)計創(chuàng)新(10%)總分指導老師簽名:年月日課程設(shè)計答辯記錄及評價表學生講述情況教師主要提問記錄學生回答問題情況答辯評分評分項目分值評價參考標準評分總分優(yōu)良中及格差選題意義1098764文獻綜述1098764研究水平與設(shè)計能力201917151310課程設(shè)計說明書(論文)撰寫質(zhì)量201917151310設(shè)計創(chuàng)新1

2、098764答辯效果302825221915答辯小組成員簽名答辯小組組長簽名:年月日課程設(shè)計成績評定表成績匯總評分項目評分比例分數(shù)課程設(shè)計總分指導老師評分50%答辯小組評分50%TOC o 1-5 h z HYPERLINK l bookmark21背景1 HYPERLINK l bookmark42.系統(tǒng)設(shè)計12.1系統(tǒng)主要目標12.2主要軟件需求(運行環(huán)境)22.3功能模塊與系統(tǒng)結(jié)構(gòu)2 HYPERLINK l bookmark83系統(tǒng)功能程序設(shè)計43.1基本要求部分4 HYPERLINK l bookmark203.1.1字節(jié)替換4 HYPERLINK l bookmark123.1.2行

3、移位5 HYPERLINK l bookmark143.1.3列混合6 HYPERLINK l bookmark163.1.4密鑰加6 HYPERLINK l bookmark183.1.5密鑰擴展73.1.6字節(jié)替換8 HYPERLINK l bookmark223.1.7行移位9 HYPERLINK l bookmark243.1.8列混合9 HYPERLINK l bookmark263.1.9加密10 HYPERLINK l bookmark283.1.10解密11 HYPERLINK l bookmark304.測試報告12 HYPERLINK l bookmark325結(jié)論21參考

4、文獻21第 頁共21頁第 頁共21頁1背景AES,密碼學中的高級加密標準(AdvaneedEncryptionStandard,AES),又稱Rijndael加密法,是美國聯(lián)邦政府采用的一種區(qū)塊加密標準。這個標準用來替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。經(jīng)過五年的甄選流程,高級加密標準由美國國家標準與技術(shù)研究院(NIST)于2001年11月26日發(fā)布于FIPSPUB197,并在2002年5月26日成為有效的標準。2006年,高級加密標準已然成為對稱密鑰加密中最流行的算法之一。AES有一個固定的128位的塊大小和128,192或256位大小的密鑰大小。該算法為比利時密碼學家Joan

5、Daemen和VincentRijmen所設(shè)計,結(jié)合兩位作者的名字,以Rijndael之命名之,投稿高級加密標準的甄選流程。(Rijdael的發(fā)音近于Rhinedoll)AES在軟體及硬件上都能快速地加解密,相對來說較易于實作,且只需要很少的記憶體。作為一個新的加密標準,目前正被部署應用到更廣大的范圍.2.系統(tǒng)設(shè)計2.1系統(tǒng)主要目標基本要求部分:1.在深入理解AES加密/解密算法理論的基礎(chǔ)上,設(shè)計一個AES加密/解密軟件系統(tǒng);2完成一個明文分組的加解密,明文和密鑰是十六進制,長度都為64比特(16個16進制數(shù)),輸入明文和密鑰,輸出密文,進行加密后,能夠進行正確的解密;程序運行時,要求輸出每一

6、輪使用的密鑰,以及每一輪加密或解密之后的16進制表示的值;要求提供所設(shè)計系統(tǒng)的報告及完整的軟件。較高要求部分:1.如果明文不止一個分組,程序能完成分組,然后加密;最后一個分組長度不足時要求完成填充;密鑰長度不足時能進行填充,過長則自動截取前面部分。2密鑰采用ASCII碼,明文要求輸入信息可以是文字(可以是漢字或英文,信息量要求不止一個加密分組長度),任意字符,或者是文本文檔,或者普通文件。進行加密后,能夠進行正確的解密;3程序代碼有比較好的結(jié)構(gòu),模塊劃分合理,如用類進行封裝,通過調(diào)用類的成員函數(shù)實現(xiàn)加密解密功能,函數(shù)的參數(shù)及返回值設(shè)置合理等;4界面友好,程序?qū)崿F(xiàn)有新意。2.2主要軟件需求(運行

7、環(huán)境)本軟件適用VC語言編寫,編譯成功后的EXE文件可以在裝有windows系統(tǒng)的任何計算機上使用。測試平臺:WindowsXPProfessional使用軟件:VisualC+6.02.3功能模塊與系統(tǒng)結(jié)構(gòu)主要功能模塊如下:1.字節(jié)替換SubByteA0,0A0,1A0,2A0,3B0,0B0,1B0,2B0,3Al,0A1,1A1,2A1,3B1,0Bl,lB1,2B1,3A2,0A2,1A2,2A2,3B2,0B2,1B2,2B2,3A3,0A3,1A3,2A3,3B3,0B3,1B3,2B3,3(S盒)1取逆2仿射變換第 #頁共21頁第 #頁共21頁第 頁共21頁第 #頁共21頁4衛(wèi)8

8、中12pJ循環(huán)左移一位心J-9中13p循環(huán)左移兩位Q+a21614pJ1“15p存循環(huán)左移3位“2.行移位ShiftRow4j8申12A1310p14p厶615p3J12第 頁共21頁第 #頁共21頁Ao,oAd,1Ao,2Ao,3AtoAuAi,2Al,3As,oA2,1A2,2Aa,3A3,0Aa,iA3,2A麗3.列混合MixColumnHxc(x)4.輪密鑰加AddRoundKeyBo,oBo,iBo,2Bo,3Bi,oBuBl,2Bl,3B2,0B2,1B2,2B2,3Ba,oBajB3,2B&3逆字節(jié)替換通過逆S盒的映射變換得到逆行移位InvShiftRow與加密時的行移位區(qū)別在于

9、移位方向相反。7.逆列混淆加密與解密系統(tǒng)流程圖如下所示,第 頁共21頁第 #頁共21頁第 頁共21頁第 #頁共21頁讀腿密文卩讀進密鑰(1)產(chǎn)生輪子密鑰讀進明文(2)AddRoundKey變換(3)輪變換Round(StateRoundKey)ByteSub(State)并ShiftRow(State)rMixColumn(State)AddRoundKey(StateRoundKey);(4)最后輪變換FinalRound(State,RoundKey)ByteSub(State)ShiftRow(State)AddRoundKey(StateRoundKey);密文3系統(tǒng)功能程序設(shè)計3.1

10、基本要求部分311字節(jié)替換SubBytes()變換是一個基于S盒的非線性置換,它用于將輸入或中間態(tài)的每一個字節(jié)通過一個簡單的查表操作,將其映射為另一個字節(jié)。映射方法是把輸入字節(jié)的高四位作為S盒的行值,低四位作為列值,然后取出S盒中對應的行和列的元素作為輸出。unsignedcharsubbytes(unsignedcharstate44)printf(aftersubbyte:n);取出中間態(tài)state映射到S盒中的值賦給中間態(tài)statefor(i=0;iv4;i+)第 頁共21頁第 #頁共21頁/輸出到屏幕顯示statefor(j=0;j4;j+)stateij=sboxstateij;fo

11、r(i=0;i4;i+)for(j=0;j4;j+)printf(tt%02x,stateij);printf(n);printf(n);return0;3.1.2行移位ShiftRows()完成基于行的循環(huán)移位操作,變換方法是第0行不動,第一行循環(huán)左移一個字節(jié),第二位循環(huán)左移兩個字節(jié),第三行循環(huán)左移三個字節(jié)。unsignedcharshiftrows(unsignedcharstate44)printf(aftershiftrows:n);k=state10;state10=state11;state11=state12;state12=state13;state13=k;/在中間態(tài)的行上,

12、/第0行不變/第一行循環(huán)左移一個字節(jié)/第二行循環(huán)左移兩個字節(jié)/第三行循環(huán)左移三個字節(jié)第 #頁共21頁第 #頁共21頁第 頁共21頁第 #頁共21頁k=state20;state20=state22;state22=k;k=state21;state21=state23;state23=k;k=state30;state30=state33;state33=state32;state32=state31;/輸出到屏幕顯示statestate31=k;for(i=0;i4;i+)for(j=0;j4;j+)printf(tt%02x,stateij);printf(n);printf(n);ret

13、urn0;3.1.3列混合MixColumns()實現(xiàn)逐列混合,方法是s(x)=c(x)*s(x)mod(x4+l)unsignedcharmixcolumns(unsignedcharstate44)printf(aftermixcolumns:n);實現(xiàn)(02030101)與中間態(tài)state分別相乘后異或得相應值for(i=0;i4;i+)/(0l02030l)/(01010203)k=state0i;/(03010102)temp0=state0i人state1i人state2i人state3i;temp1=state0i人state1i;temp1=xtime(temp1);state

14、0iA=temp1人temp0;temp1=state1iAstate2i;temp1=xtime(temp1);state1iA=temp1Atemp0;temp1=state2iAstate3i;temp1=xtime(temp1);state2iA=temp1Atemp0;temp1=state3iAk;temp1=xtime(temp1);state3iA=temp1Atemp0;for(i=0;i4;i+)輸出到屏幕顯示statefor(j=0;j4;j+)printf(tt%02x,stateij);printf(n);printf(n);return0;3.1.4輪密鑰加AddR

15、oundKey()用于將輸入或中間態(tài)S的每一列與一個密鑰字ki進行按位異或,每一個輪密鑰由Nb個字組成。unsignedcharaddroundkey(unsignedcharstate44,unsignedcharw44)printf(addroundkey%d:n,round+);將中間態(tài)state中的每一列與一個密鑰字(w44中的一列)進行按位異或for(i=0;i4;i+)/完了又賦值給statefor(j=0;j4;j+)stateijA=wij;for(i=0;i4;i+)for(j=0;j4;j+)printf(tt%02x,stateij);printf(n);printf(n

16、);return0;/輸出到屏幕顯示出來state3.1.5密鑰擴展通過生成器產(chǎn)生Nr+1個輪密鑰,每個輪密鑰由Nb個字組成,共有Nb(Nr+1)個字。在加密過程中,需要Nr+1個輪密鑰,需要構(gòu)造4(Nr+1)個32位字。首先將輸入的4個字節(jié)直接復制到擴展密鑰數(shù)組的前4個字中,得到W0,W1,W2,W3;然后每次用4個字填充擴展密鑰數(shù)余下的部分。/keyexpandprintf(afterkeyexpand:n);for(i=4;i8;i+)if(i%4=0)rotword0=w1i-1;rotword1=w2i-1;rotword2=w3i-1;rotword3=w0i-1;printf(r

17、otword():);for(j=0;j4;j+)printf(%02x,rotwordj);for(j=0;j4;j+)subwordj=sboxrotwordj;printf(nsubword():);for(j=0;j4;j+)printf(%02x,subwordj);printf(nn);for(j=0;j4;j+)rconj=subwordj人RconNj;printf(afterARcon():);for(j=0;j4;j+)printf(%02x,rconj);printf(nn);for(j=0;j4;j+)wji%4=rconjAwji-4;第 頁共21頁第 頁共2l頁pr

18、intf(w%d:,count);for(j=0;j4;j+)printf(%02x,wji%4);count+;elsefor(j=0;j4;j+)wji%4=wji%4Awj(i%4)-l;printf(w%d:,count);for(j=0;j4;j+)printf(%02x,wji%4);count+;printf(nn);printf(密鑰擴展Roundkey:n);for(i=0;i4;i+)for(j=0;j4;j+)printf(tt%02x,wij);printf(n);printf(n);3.1.6逆字節(jié)替換與字節(jié)代替類似,逆字節(jié)代替基于逆S盒實現(xiàn)。unsignedchar

19、InvSubbytes(unsignedcharstate44)for(i=0;i4;i+)/基于逆S盒的映射替代for(j=0;j4;j+)stateij=rsboxstateij;printf(afterInvSubbyte:n);for(i=0;i4;i+)for(j=0;j4;j+)/輸出到屏幕顯示stateprintf(tt%02x,stateij);printf(n);printf(n);return0;3.1.7逆行移位與行移位相反,逆行移位將態(tài)state的后三行按相反的方向進行移位操作,即第0行保持不變,第1行循環(huán)向右移一個字節(jié),第2行循環(huán)向右移動兩個字節(jié),第3行循環(huán)向右移動三

20、個字節(jié)。unsignedcharInvShiftRows(unsignedcharstate44)/對中間態(tài)state進行移位操作/第0行保持不變/第1行循環(huán)右移一個字節(jié)/第2行循環(huán)右移兩個字節(jié)/第3行循環(huán)右移三個字節(jié)k=state13;state13=state12;state12=state11;state11=state10;state10=k;k=state20;state20=state22;state22=k;k=state21;state21=state23;state23=k;k=state30;state30=state31;state31=state32;/輸出到屏幕顯示s

21、tatestate32=state33;state33=k;printf(afterInvShiftRows:n);for(i=0;i4;i+)for(j=0;j4;j+)printf(tt%02x,stateij);printf(n);printf(n);return0;3.1.8逆列混合逆列混淆的處理辦法與MixColumns()類似,每一列都通過與一個固定的多項式d(x)相乘進行交換。unsignedcharInvMixColumns(unsignedcharstate44)printf(afterInvMixColumns:n);實現(xiàn)(Oe0b0d09)與中間態(tài)state分別相乘后異或

22、得相應值for(i=0;i4;i+)/(090e0b0d)temp0=state0i;/(0d090e0b)temp1=state1i;/(0b0d090e)temp2=state2i;temp3=state3i;stateOi=Multiply(tempO,OxOe)人Multiply(templ,OxOb)人Multiply(temp2,OxOd)人Multiply(temp3,0 x09);state1i=Multiply(temp0,0 x09)人Multiply(temp1,0 x0e)人Multiply(temp2,0 x0b)人Multiply(temp3,0 x0d);stat

23、e2i=Multiply(temp0,0 x0d)人Multiply(temp1,0 x09)人Multiply(temp2,0 x0e)人Multiply(temp3,0 x0b);state3i=Multiply(temp0,0 x0b)人Multiply(temp1,0 x0d)人Multiply(temp2,0 x09)人Multiply(temp3,0 x0e);for(i=0;i4;i+)/輸出到屏幕顯示statefor(j=0;j4;j+)printf(tt%02x,stateij);printf(n);printf(n);return0;3.1.9加密加密部分我分了兩種情況,一

24、種是自動檢查加密程序的正確性,之前在程序里給明文和密鑰賦上初值,運行程序檢驗結(jié)果是否正確;另一種是用戶手動輸入32位的十六進制數(shù),進行加密,我是把每一具體項模塊化,將功能在每個具體模塊中實現(xiàn),只需要直接調(diào)用,視覺效果強,一目了然。下面是實現(xiàn)加密功能一些關(guān)鍵代碼voidAES_encrypt(unsignedcharStateN,unsignedcharRoundKeyN)message16=0 x32,0 x43,0 xf6,0 xa8,0 x88,0 x5a,0 x30,0 x8d,0 x31,0 x31,0 x98,0 xa2,0 xe0,0 x37,0 x07,0 x34;key16=0

25、 x2b,0 x7e,0 x15,0 x16,0 x28,0 xae,0 xd2,0 xa6,0 xab,0 xf7,0 x15,0 x88,0 x09,0 xcf,0 x4f,0 x3cfor(i=0;i4;i+)for(j=0;j4;j+)/分別獲取明文和密鑰stateji=messagem;wji=keym;m+;.addroundkey(state,w);for(round=2;round11;round+)printf(第%d輪加密:n,round);subbytes(state);shiftrows(state);mixcolumns(state);keyexpand(w,roun

26、d);addroundkey(state,w);subbytes(state);/最后一輪shiftrows(state);keyexpand(w,10);addroundkey(state,w);3.1.10解密AES解密我也是分成了兩個部分,第一部分是在程序中對密文和密鑰賦初值,通過與標準對照檢查解密過程的正確性;第二部分是用戶手動輸入密文和密鑰,程序?qū)ζ溥M行解密,得到最后的明文。解密過程基本如下:1)獲取輸入的明文和密鑰2)通過密鑰擴展過程獲取各輪密鑰3)輪密鑰加變換過程4)逆行移位5)逆字節(jié)替代6)輪密鑰加變換7)逆列混淆47步共9次循環(huán),最后一輪實現(xiàn)46步,完成解密過程。主要代碼如下

27、:voidAES_decrypt(unsignedcharStateN,unsignedcharwN)key16=0 x2b,0 x7e,0 x15,0 x16,0 x28,0 xae,0 xd2,0 xa6,0 xab,0 xf7,0 x15,0 x88,0 x09,0 xcf,0 x4f,0 x3c;cipher16=0 x39,0 x25,0 x84,0 x1d,0 x02,0 xdc,0 x09,0 xfb,0 xdc,0 x11,0 x85,0 x97,0 x19,0 x6a,0 x0b,0 x32;printf(%02x,keyi);printf(n);/獲取密文和密鑰for(i=

28、0;i4;i+)for(j=0;j0;i-)/1-9輪InvShiftRows(state);InvSubbytes(state);Keyexpand(w,round);AddRoundKey(State,w);InvMixColumns(State);InvShiftRows(State);/最后一輪InvSubBytes(State);Keyexpand(w,0);AddRoundKey(State,w);第 頁共21頁第 #頁共2l頁4.測試報告為檢驗程序的正確性,需要將結(jié)果與標準相對照。參照老師課件里的AES運行程序的運行結(jié)果,與我的運行結(jié)果對照如下:下面是我的運行界面:第 頁共21頁

29、第 #頁共2l頁Round44867蕊6cIde35f4e9dbl5SeeOd3Se7RoundKeyefa8b6db445271ObaS5b25ad417f3b00Round5eOc8d勺859263blbS7f6335beRoundKeye8cO5Q01d47cea11dl83f2f9c69db815f887bebeRound6flcl7e5d0092c8bS6f4cBbd555ef320cRoundKey6d11dbca880bf900a33e86937afd41fd上面的是標準,接著的是我的運行測試,下面的是我從終端中復制的過程:密鑰擴展Roundkey:efa8b6db4452710

30、ba55b25ad417f3b00addroundkey5:第 頁共21頁第 #頁共2l頁e0c8d9859263b1b87f6335bee8c05001第6輪加密:aftersubbyte:e1e835974ffbc86cd2fb96ae9bba537caftershiftrows:e1e83597fbc86c4f96aed2fb7c9bba53aftermixcolumns:25bdb64cd1113a4ca9d133c0ad688eb0afterkeyexpand:rotword():0bad00dbsubword():2b9563b9afterARcon():3b9563b9w20:d

31、4d1c6f8w21:7c839d87w22:caf2b8bcw23:11f915bc密鑰擴展Roundkey:d47cca11d183f2f9c69db815f887bcbc第 頁共21頁第 #頁共2l頁addroundkey6:f1c17c5d0092c8b56f4c8bd555ef320c第7輪加密:aftersubbyte:a178104c634fe8d5a8293d03fcdf23feaftershiftrows:a178104c4fe8d5633d03a829fefcdf23aftermixcolumns:4b2c3337864a9dd28d89f4186d80e8d8afterk

32、eyexpand:rotword():f915bc11subword():99596582afterARcon():b95965w24:6d88a37aw25:110b3efdw26:dbf98641w27:ca0093fd密鑰擴展Roundkey:6d11dbca880bf900a33e86937afd41fdaddroundkey7:263de8fd0e4164d22eb7728b177da925第8輪加密:aftersubbyte:f7279b54ab8343b531a9403df0ffd33faftershiftrows:f7279b548343b5ab403d31a93ff0ffd3

33、aftermixcolumns:144627341516462ab51556d8bfecd743afterkeyexpand:rotword():0093fdcasubword():63dc5474afterARcon():23dc5474w28:4e54f70ew29:5f5fc9f3w30:84a64fb2w31:4ea6dc4f密鑰擴展Roundkey:4e5f844e545fa6a6f7c94fdc0ef3b24faddroundkey8:5a19a37a4149e08c42dc1904b11f650c第9輪加密:aftersubbyte:bed40ada833be1642c86d4f

34、2c8c04dfeaftershiftrows:bed40ada3be16483d4f22c86fec8c04daftermixcolumns:00b154fa51c8761b2f896d99d1ffcdeaafterkeyexpand:rotword():a6dc4f4esubword():2486842fafterARcon():a486842fw32:ead27321w33:b58dbad2w34:312bf560w35:7f8d292f密鑰擴展Roundkey:eab5317fd28d2b8d73baf52921d2602faddroundkey9:ea04658583455d965c3398b0f02dadc5第10輪加密:aftersubbyte:87f24d97ec6e4c904ac346e78cd895a6aftershiftrows:87f24d976e4c90ec46e74ac3a68cd895aftermixcolumns:4740a34c37d4709f94e43a42eda5a6bcafterkeyexpand:rotword():8d292f7fsubword():5da515d2afterARcon():46a515d2w36:ac7766f3w37:19fadc21w38:28d12941w39:575c006e密鑰擴展Rou

溫馨提示

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

評論

0/150

提交評論