基于利用Matlab语言实现DES加密算法毕业设计

上传人:m**** 文档编号:541432964 上传时间:2024-02-03 格式:DOCX 页数:11 大小:112.60KB
返回 下载 相关 举报
基于利用Matlab语言实现DES加密算法毕业设计_第1页
第1页 / 共11页
基于利用Matlab语言实现DES加密算法毕业设计_第2页
第2页 / 共11页
基于利用Matlab语言实现DES加密算法毕业设计_第3页
第3页 / 共11页
基于利用Matlab语言实现DES加密算法毕业设计_第4页
第4页 / 共11页
基于利用Matlab语言实现DES加密算法毕业设计_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《基于利用Matlab语言实现DES加密算法毕业设计》由会员分享,可在线阅读,更多相关《基于利用Matlab语言实现DES加密算法毕业设计(11页珍藏版)》请在金锄头文库上搜索。

1、密码学与网络安全课程实验利用Matlab语言实现DES加密算法姓名:ZA 学号:XXXXX一、 实验目的1) 牢固掌握DES密码算法2) 通过编程实现DES算法,深入掌握现代密码算法实现的基本方法3) 验证DES算法中各个模块在实现混淆和弥散中的作用二、 实验内容要求1) DES算法实现:利用Matlab语言实现DES密码算法,输入64比特明文和56比特密钥,加密得到64比特的密文;2) DES弱密钥验证:观察弱密钥两次加密的结果,与非弱密钥两次加密的结果进行比较;3) DES算法初步应用:尝试加密一个字符串,字符串的长度大于8个字节;4) DES弥散特性分析:试输出每一轮加密得到的比特序列,

2、并比较当初始明文1个比特发生变化时,每一轮加密输出的哪些比特发生变化。三、 实验方案与步骤3.1 DES算法实现a) 算法实现方案Matlab(矩阵实验室)是一款工程计算用的软件,功能十分强大。Matlab的计算基于矩阵,而DES算法用矩阵描述是十分简洁方便的。因此,选用Matlab作为算法实现语言,基于一系列的矩阵变换、运算来实现DES算法的加密。b) 主要功能实现流程及代码解析1) 加密程序图1 DES基本结构DES算法的结构非常简单,是一个16次的迭代。核心是函数中一系列变换。根据算法框图,程序步骤主要分为三大部分:1) 输入明文和密钥进行字符转换2) 产生16轮密钥矩阵3) 16轮迭代

3、%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=0000,dec2bin(hex2dec(Ki); KBi=KBi(end-3:

4、end); KBi=str2num(KBi(1),str2num(KBi(2),str2num(KBi(3),str2num(KBi(4); KB=KB,KBi; endK=KB;% 转化为64位二进制密钥 %-第三步 产生密钥-%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,53,45,37,29,21,13,5,28,20,12,4;%PC_1置换矩阵 56位KEY0=K

5、(PC_1);% 初始矩阵变换 64 to 56%循环移位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位循环移位%circshift是右移 移动负数位表示左移D(i,:)=circshift(D(i-1,:),shift_array(i-1); %后28位循环移位endPC2=14,17,11,24,1,5,3,28,15,6,21,10,23,1

6、9,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);%循环移位KEY_MAT=C,D;%17*56KEY_MAT=KEY_MAT(2:17,:);%16*56PC_2=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

7、,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 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); %输入的

8、左半部分明文 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 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

9、 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函数的实现 输入Ri-1 表示第i-1轮的右半部分密文 输出第i轮的密文 Ri_1_ex=trm32_to_48(Ri_1);% 第一步 右半明文进行32to48扩展 OK Ri_1_ex2=reshape(Ri_1_ex,1,48);

10、%将扩展的48位变为向量 OK f=bitxor(KEY(m,:),Ri_1_ex2); %与第i轮密钥按位异或 f1=reshape(f,6,8); %变为矩阵 8个6位二进制数 8*6 %经过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,5); %S盒横坐标 f2=s(x+1,y+1); %取S盒中某一数 f2_bin=0000,dec2bin(f2);% % 字符串处理 f2_bin=f2_bin(end-3:end); f2_1=str2num(f2_bin(1),str

11、2num(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函数后的Ri_1进行按位异或 Li=Ri_1; %交换位置end程序见demo5.m。2) 解密程序DES算法设计巧妙也体现在其解密过程非常简单,结构和加密算法完全一样,只需要将16轮加密所用的密钥完全倒过来。对密钥矩阵16X64的行倒序排列,得到倒过来后的密钥矩阵。其余部分与解密程序保持一致即可。解密时,输入密文和密钥,得到明文。 程序见d

12、emo5_inv.m。c) 加密64比特明文,对密文进行解密得到明文,观察是否与初始明文一致加密。这里用Matlab 中的GUI界面编写了加解密的交互程序。交互程序见desecb.m。在程序demo5.m中输入64比特明文及64比特密钥:M=ABCDEF;K=ABCDEF;运行:m_hex = 56CC09E7CFDC4CEF图2 DES_demo GUI界面解密:在程序demo5_inv.m中输入64比特密文及64比特密钥:M=56CC09E7CFDC4CEF;K=ABCDEF;运行: m_hex =ABCDEF将密文解密后与初始明文一致。为了证明程序对DES算法的正确实现,用密码学习软件C

13、ryptool进行了验证。加密结果与本程序一致。图3 CrypTool加密结果3.2 DES弱密钥验证a) 用选定的弱密钥进行两次加密,观察得到的结果用已知四个弱密钥中的一个FFFFFFFFFFFFFFFF,对ABCDEF进行加密:M=ABCDEF;K=FFFFFFFFFFFFFFFF;m_hex =6DCE0DCA3再次加密:M=6DCE0DCA3;K=FFFFFFFFFFFFFFFF;m_hex = ABCDEF可以看出,两次加密后密文和第一次的初始明文一样,相当于是加密后再解密。验证了弱密钥。b) 用选定的非弱密钥进行两次加密,观察得到的结果用已知四个半弱密钥中的一个01FE01FE01FE01FE和对ABCDEF进行加密: M=ABCDEF; K=01FE01FE01FE01FE;m_hex =8A76C7A4F16D47ED再用与01FE01FE01FE01FE对应的半弱密钥FE01FE01FE01FE01FE01加密:M=8A76C7A4F16D47ED;K=FE01FE01FE01FE01;m_hex =ABCDEF可以看出,一对半弱密钥能够互相加解密。3.3 DES算法初步应用a) 任意选定一个长度大于8个字符的字符串,设计一种方法对这个字符串进行加密用电码本模式ECB直接对明文分成以64位一组的

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 外语文库 > 英语词汇

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号