




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優(yōu)質文檔-傾情為你奉上密碼學與網(wǎng)絡安全課程實驗利用Matlab語言實現(xiàn)DES加密算法姓名:ZA 學號:XXXXX一、 實驗目的1) 牢固掌握DES密碼算法2) 通過編程實現(xiàn)DES算法,深入掌握現(xiàn)代密碼算法實現(xiàn)的基本方法3) 驗證DES算法中各個模塊在實現(xiàn)混淆和彌散中的作用二、 實驗內容要求1) DES算法實現(xiàn):利用Matlab語言實現(xiàn)DES密碼算法,輸入64比特明文和56比特密鑰,加密得到64比特的密文;2) DES弱密鑰驗證:觀察弱密鑰兩次加密的結果,與非弱密鑰兩次加密的結果進行比較;3) DES算法初步應用:嘗試加密一個字符串,字符串的長度大于8個字節(jié);4) DES彌散特性分析:試輸出
2、每一輪加密得到的比特序列,并比較當初始明文1個比特發(fā)生變化時,每一輪加密輸出的哪些比特發(fā)生變化。三、 實驗方案與步驟3.1 DES算法實現(xiàn)a) 算法實現(xiàn)方案Matlab(矩陣實驗室)是一款工程計算用的軟件,功能十分強大。Matlab的計算基于矩陣,而DES算法用矩陣描述是十分簡潔方便的。因此,選用Matlab作為算法實現(xiàn)語言,基于一系列的矩陣變換、運算來實現(xiàn)DES算法的加密。b) 主要功能實現(xiàn)流程及代碼解析1) 加密程序圖1 DES基本結構DES算法的結構非常簡單,是一個16次的迭代。核心是函數(shù)中一系列變換。根據(jù)算法框圖,程序步驟主要分為三大部分:1) 輸入明文和密鑰進行字符轉換2) 產(chǎn)生16
3、輪密鑰矩陣3) 16輪迭代%demo5.mclc, clear all;%-第一步 輸入明文和密鑰-%M='ABCDEF'% K='ABCDEF'%MB=; for i=1:16 Mi=M(i); MBi='0000',dec2bin(hex2dec(Mi); MBi=MBi(end-3:end); MBi=str2num(MBi(1),str2num(MBi(2),str2num(MBi(3),str2num(MBi(4); MB=MB,MBi; endM=MB;% 轉化為64位二進制明文KB=; for i=1:16 Ki=K(i); KBi
4、='0000',dec2bin(hex2dec(Ki); KBi=KBi(end-3:end); KBi=str2num(KBi(1),str2num(KBi(2),str2num(KBi(3),str2num(KBi(4); KB=KB,KBi; endK=KB;% 轉化為64位二進制密鑰 %-第三步 產(chǎn)生密鑰-%PC_1=57,49,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
5、,53,45,37,29,21,13,5,28,20,12,4;%PC_1置換矩陣 56位KEY0=K(PC_1);% 初始矩陣變換 64 to 56%循環(huán)移位>>>>>shift_array=-1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1; C(1,:)=KEY0(1:28);%C0D(1,:)=KEY0(29:56);%D0for i=2:17C(i,:)=circshift(C(i-1,:)',shift_array(i-1)' %前28位循環(huán)移位%circshift是右移 移動負數(shù)位表示左移D(i,:)=circshift
6、(D(i-1,:)',shift_array(i-1)' %后28位循環(huán)移位endPC2=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,29,32;Ki=zeros(16,48);%循環(huán)移位>>>>>KEY_MAT=C,D;%17*56KEY_MAT=KEY_MAT(2:17,:);%16*56PC_2=14,17,11,24,1,5,3
7、,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,29,32; for i=1:16Ki(i,:)=KEY_MAT(i,PC_2);endKEY=Ki;%-第四步 Feistel結構-%IP=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
8、 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7;%IP初始置換矩陣 M=M(IP);%初始置換 m0_L=M(1:32); %輸入的左半部分明文 m0_R=M(33:64);% 輸入的右半部分明文 L,R=fchange(m0_L,m0_R,1,KEY); mi=L,R; mi2_hex(1,:)=mi%進入16輪迭代> for i=2:16 L,R=fchange(L,R,i,KEY); mi=L,R; mi2_hex(i,:)=mi end IP_1=40 8 48 16 56 24 64 32 3
9、9 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;%IP_1初始逆置換矩陣m16=R,L;% 最后一步進行交換C=m16(IP_1); %IP逆置換m_hex=m_2_hex(C)% 轉化為16進制 輸出密文%fchange.mfunction Li,Ri = fchange(Li_1,Ri_1,m,KEY)%第i輪f函數(shù)的實現(xiàn)
10、輸入Ri-1 表示第i-1輪的右半部分密文 輸出第i輪的密文 Ri_1_ex=trm32_to_48(Ri_1);% 第一步 右半明文進行32to48擴展 OK Ri_1_ex2=reshape(Ri_1_ex',1,48); %將擴展的48位變?yōu)橄蛄?OK f=bitxor(KEY(m,:),Ri_1_ex2); %與第i輪密鑰按位異或 f1=reshape(f,6,8)' %變?yōu)榫仃?8個6位二進制數(shù) 8*6 %經(jīng)過S1盒 s=S_box(1); x=2*f1(1,1)+f1(1,6); %S盒縱坐標 y=8*f1(1,2)+4*f1(1,3)+2*f1(1,4)+f1(1
11、,5); %S盒橫坐標 f2=s(x+1,y+1); %取S盒中某一數(shù) f2_bin='0000',dec2bin(f2);% % 字符串處理 f2_bin=f2_bin(end-3:end); f2_1=str2num(f2_bin(1),str2num(f2_bin(2),str2num(f2_bin(3),str2num(f2_bin(4);%省略s2s8盒 Ri_1_P=P_exchange(f2S); %轉化為向量并置換運算P Ri=bitxor(Li_1,Ri_1_P); %Li_1與f函數(shù)后的Ri_1進行按位異或 Li=Ri_1; %交換位置end程序見。2) 解
12、密程序DES算法設計巧妙也體現(xiàn)在其解密過程非常簡單,結構和加密算法完全一樣,只需要將16輪加密所用的密鑰完全倒過來。對密鑰矩陣16X64的行倒序排列,得到倒過來后的密鑰矩陣。其余部分與解密程序保持一致即可。解密時,輸入密文和密鑰,得到明文。 程序見。c) 加密64比特明文,對密文進行解密得到明文,觀察是否與初始明文一致加密。這里用Matlab 中的GUI界面編寫了加解密的交互程序。交互程序見desecb.m。在程序demo5.m中輸入64比特明文及64比特密鑰:M='ABCDEF'K='ABCDEF'運行:m_hex = 56CC09E7CFDC4CEF圖2 D
13、ES_demo GUI界面解密:在程序demo5_inv.m中輸入64比特密文及64比特密鑰:M='56CC09E7CFDC4CEF'K='ABCDEF'運行: m_hex =ABCDEF將密文解密后與初始明文一致。為了證明程序對DES算法的正確實現(xiàn),用密碼學習軟件Cryptool進行了驗證。加密結果與本程序一致。圖3 CrypTool加密結果3.2 DES弱密鑰驗證a) 用選定的弱密鑰進行兩次加密,觀察得到的結果用已知四個弱密鑰中的一個FFFFFFFFFFFFFFFF,對'ABCDEF'進行加密:M='ABCDEF'K='
14、;FFFFFFFFFFFFFFFF'm_hex =6DCE0DCA3再次加密:M='6DCE0DCA3'K='FFFFFFFFFFFFFFFF'm_hex = ABCDEF可以看出,兩次加密后密文和第一次的初始明文一樣,相當于是加密后再解密。驗證了弱密鑰。b) 用選定的非弱密鑰進行兩次加密,觀察得到的結果用已知四個半弱密鑰中的一個01FE01FE01FE01FE和對'ABCDEF'進行加密: M='ABCDEF' K='01FE01FE01FE01FE'm_hex =8A76C7A4F16D47ED再用與0
15、1FE01FE01FE01FE對應的半弱密鑰FE01FE01FE01FE01FE01加密:M='8A76C7A4F16D47ED'K='FE01FE01FE01FE01'm_hex =ABCDEF可以看出,一對半弱密鑰能夠互相加解密。3.3 DES算法初步應用a) 任意選定一個長度大于8個字符的字符串,設計一種方法對這個字符串進行加密用電碼本模式ECB直接對明文分成以64位一組的塊,這里用密文分組鏈接模式CBC來實現(xiàn)。 算法步驟:1) 對任意長(m bit)明文分成N組,每組64bit2) 初始向量IV與第一組明文異或3) 第i-1組密文與第i組明文異或作為DE
16、S的輸入明文4) 迭代N-1次5) 得到N*64bit密文,截取為 m bit算法框圖為:圖4 DES_CBC模式基本結構程序編寫主要實現(xiàn)對任意長明文分組,以及對DES外圍結構的改變。主要代碼如下:M='ABCDEFABCDABCDEFABCD'% 任意長明文K='ABCDEF'%密鑰IV='AABBCCDD' %初始向量%*明文分組»»a=ceil(length(M)/16); %向上取整 MB=M; for i=1:16*a-length(M) MB=MB '0' endMi=;for j=1:a Mi(j
17、,:)=MB(16*j-15):16*j); endM=bitxor(M,IV); %算法核心是先按位異或再輸入DES程序見,。運行,得密文:C_CBC =21BC605D513B38E8D8EF6671DD7E6266C1FA5AC143D26與明文等長(60*4bit)。b) 分析你所設計的這種方法有什么優(yōu)點和/或缺點CBC算法的優(yōu)點很明顯能有效地避免ECB對明文統(tǒng)計特征的泄漏,因為同一明文塊輸入DES中的實際明文是不一樣的。CBC算法的缺點也是很明顯的,由于其算法結構的限制,CBC不能實現(xiàn)并行運算,且誤差傳遞效應比ECB差,一個密文塊損壞,會引起兩個明文塊損壞。3.4 DES彌散特性分析
18、a) 選擇任意64比特明文m,選擇任意56比特密鑰k進行加密,并輸出每一輪加密的64比特序列選定明文和密鑰,依次輸出每一輪加密輸出的密文:明文:M='ABCDEF'密鑰:K='ABCDEF'每一輪的加密結果如下表所示:輪數(shù)密文輪數(shù)密文1F0AAF0AA5E1CEC6325E1CEC6382E13C49382E13CF94F90DD64AFB50DD64AFBB6BF1470BC27F1470BC2394C8F458394C8F45348DC7469348DC746F37100C610F37100C63C22A9CB113C22A9CB0A37C369120A37
19、C3695C725FFB135C725FFBF4748AD614F4748AD6CC6C340E15CC6C340EBA88F69916BA88F699FB21FB9C 表1 16輪加密結果b) 隨機改變m中的一個比特,用上述密鑰k進行加密,并輸出每一輪加密的64比特序列,與上一步的結果進行比較,你發(fā)現(xiàn)了什么?將明文:M='ABCDEF'中第四位二進制改為1, 則明文變?yōu)椋篗='ABCDEF', 用相同的密鑰加密,用紅字標注出前6輪密文中與之前對應相等的位數(shù),結果為:輪數(shù)密文輪數(shù)密文1F0AAF0AA5E1DEC6325E1DEC63A3E52C893A3E52
20、C89ECE9D0E24ECE9D0E269DD75C5569DD75C5ABC7850D6ABC7850D0DC7CB6170DC7CB61A75AF6488A75AF64855F4CFF9955F4CFF92689AB42102689AB4249F546141149FDFDC287122DFDC287A13AAB62F91498AB62F9D4C4149D15D4C4149DCF16CFAAE41685 表3 明文改變1bit后的16輪加密結果首先定性的可以明顯看出:第一輪密文有1bit不相等: 即第二輪密文有7bit 不相等: 即 即 即 即 即 即為了說明彌散特性,對改變后的16輪密文與之前產(chǎn)生密文進行定量分析(相等位數(shù)檢查程序見):輪數(shù)相等位數(shù)輪數(shù)相等位數(shù)1632573424315306347358329311022112412301325143415311625 表4 明文改變1bit前后的16輪加密結果中相等比特位數(shù)由上表可以看出,隨著輪數(shù)增加,初始明文1bit的改變對于密文的彌散效應越好。理論上,任意兩個64位二進制序列相等時在相等位數(shù)為32時概率最大(每一位取0,1是等概率的), 因此在第四輪之后可認
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 私人代持協(xié)議書
- 監(jiān)控共用協(xié)議書
- 泰坦隕落協(xié)議書
- 礦山出租協(xié)議書
- 工廠出資合同協(xié)議書
- 客戶開發(fā)保護協(xié)議書
- 種苗購銷協(xié)議書
- 宣傳承包合作協(xié)議書
- 汽車名責協(xié)議書
- 工地民房回收協(xié)議書
- 重慶金太陽2025屆高三5月聯(lián)考英語及答案
- 護理事業(yè)編試題及答案
- 全國新能源汽車關鍵技術技能大賽理論知識競賽題庫
- 外籍人員雇傭合同(中英文對照)6篇
- 《不可或缺的醫(yī)療保障:課件中的健康險》
- 財產(chǎn)申報表-被執(zhí)行人用
- 委托聘請演員合同協(xié)議
- 水庫防汛知識培訓
- 2025年貴州省遵義市中考一模英語試題(含筆試答案無聽力原文及音頻)
- 安徽省C20教育聯(lián)盟2025年九年級中考“功夫”卷(二)數(shù)學
- 《影視廣告創(chuàng)意與制作》課件 教學項目6 蒙太奇剪輯
評論
0/150
提交評論