基于利用Matlab语言实现DES加密算法毕业设计.docx_第1页
基于利用Matlab语言实现DES加密算法毕业设计.docx_第2页
基于利用Matlab语言实现DES加密算法毕业设计.docx_第3页
基于利用Matlab语言实现DES加密算法毕业设计.docx_第4页
基于利用Matlab语言实现DES加密算法毕业设计.docx_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

密码学与网络安全课程实验利用matlab语言实现des加密算法姓名:za 学号:xxxxx一、 实验目的1) 牢固掌握des密码算法2) 通过编程实现des算法,深入掌握现代密码算法实现的基本方法3) 验证des算法中各个模块在实现混淆和弥散中的作用二、 实验内容要求1) des算法实现:利用matlab语言实现des密码算法,输入64比特明文和56比特密钥,加密得到64比特的密文;2) des弱密钥验证:观察弱密钥两次加密的结果,与非弱密钥两次加密的结果进行比较;3) des算法初步应用:尝试加密一个字符串,字符串的长度大于8个字节;4) des弥散特性分析:试输出每一轮加密得到的比特序列,并比较当初始明文1个比特发生变化时,每一轮加密输出的哪些比特发生变化。三、 实验方案与步骤3.1 des算法实现a) 算法实现方案matlab(矩阵实验室)是一款工程计算用的软件,功能十分强大。matlab的计算基于矩阵,而des算法用矩阵描述是十分简洁方便的。因此,选用matlab作为算法实现语言,基于一系列的矩阵变换、运算来实现des算法的加密。b) 主要功能实现流程及代码解析1) 加密程序图1 des基本结构des算法的结构非常简单,是一个16次的迭代。核心是函数中一系列变换。根据算法框图,程序步骤主要分为三大部分:1) 输入明文和密钥进行字符转换2) 产生16轮密钥矩阵3) 16轮迭代%demo5.mclc, clear all;%-第一步 输入明文和密钥-%m=0123456789abcdef;% k=0123456789abcdef;%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: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(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,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);%循环移位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,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); %输入的左半部分明文 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 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); %将扩展的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),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函数后的ri_1进行按位异或 li=ri_1; %交换位置end程序见demo5.m。2) 解密程序des算法设计巧妙也体现在其解密过程非常简单,结构和加密算法完全一样,只需要将16轮加密所用的密钥完全倒过来。对密钥矩阵16x64的行倒序排列,得到倒过来后的密钥矩阵。其余部分与解密程序保持一致即可。解密时,输入密文和密钥,得到明文。 程序见demo5_inv.m。c) 加密64比特明文,对密文进行解密得到明文,观察是否与初始明文一致加密。这里用matlab 中的gui界面编写了加解密的交互程序。交互程序见desecb.m。在程序demo5.m中输入64比特明文及64比特密钥:m=0123456789abcdef;k=0123456789abcdef;运行:m_hex = 56cc09e7cfdc4cef图2 des_demo gui界面解密:在程序demo5_inv.m中输入64比特密文及64比特密钥:m=56cc09e7cfdc4cef;k=0123456789abcdef;运行: m_hex =0123456789abcdef将密文解密后与初始明文一致。为了证明程序对des算法的正确实现,用密码学习软件cryptool进行了验证。加密结果与本程序一致。图3 cryptool加密结果3.2 des弱密钥验证a) 用选定的弱密钥进行两次加密,观察得到的结果用已知四个弱密钥中的一个ffffffffffffffff,对0123456789abcdef进行加密:m=0123456789abcdef;k=ffffffffffffffff;m_hex =6dce0dc9006556a3再次加密:m=6dce0dc9006556a3;k=ffffffffffffffff;m_hex = 0123456789abcdef可以看出,两次加密后密文和第一次的初始明文一样,相当于是加密后再解密。验证了弱密钥。b) 用选定的非弱密钥进行两次加密,观察得到的结果用已知四个半弱密钥中的一个01fe01fe01fe01fe和对0123456789abcdef进行加密: m=0123456789abcdef; k=01fe01fe01fe01fe;m_hex =8a76c7a4f16d47ed再用与01fe01fe01fe01fe对应的半弱密钥fe01fe01fe01fe01fe01加密:m=8a76c7a4f16d47ed;k=fe01fe01fe01fe01;m_hex =0123456789abcdef可以看出,一对半弱密钥能够互相加解密。3.3 des算法初步应用a) 任意选定一个长度大于8个字符的字符串,设计一种方法对这个字符串进行加密用电码本模式ecb直接对明文分成以64位一组的块,这里用密文分组链接模式cbc来实现。 算法步骤:1) 对任意长(m bit)明文分成n组,每组64bit2) 初始向量iv与第一组明文异或3) 第i-1组密文与第i组明文异或作为des的输入明文4) 迭代n-1次5) 得到n*64bit密文,截取为 m bit算法框图为:图4 des_cbc模式基本结构程序编写主要实现对任意长明文分组,以及对des外围结构的改变。主要代码如下:m=0123456789abcdef0123456789abcd0123456789abcdef0123456789abcd;% 任意长明文k=0123456789abcdef;%密钥iv=11223344aabbccdd; %初始向量%*明文分组a=ceil(length(m)/16); %向上取整 mb=m; for i=1:16*a-length(m) mb=mb 0; endmi=;for j=1:a mi(j,:)=mb(16*j-15):16*j); endm=bitxor(m,iv); %算法核心是先按位异或再输入des程序见mydes.m,demo5_cbc.m。运行,得密文:c_cbc =21bc605d513b38e8d8ef6671d93179070d7e6266c1fa5a5210099c143d26与明文等长(60*4bit)。b) 分析你所设计的这种方法有什么优点和/或缺点cbc算法的优点很明显能有效地避免ecb对明文统计特征的泄漏,因为同一明文块输入des中的实际明文是不一样的。cbc算法的缺点也是很明显的,由于其算法结构的限制,cbc不能实现并行运算,且误差传递效应比ecb差,一个密文块损坏,会引起两个明文块损坏。3.4 des弥散特性分析a) 选择任意64比特明文m,选择任意56比特密钥k进行加密,并输出每一轮加密的64比特序列选定明文和密钥,依次输出每一轮加密输出的密文:明文:m=0123456789abcdef;密钥:k=0123456789abcdef;每一轮的加密结果如下表所示:轮数密文轮数密文1f0aaf0aa5e1cec6325e1cec6382e13c49382e13c49499542f94499542f90dd64afb50dd64afb7036043b67036043bf1470bc27f1470bc2394c8f458394c8f45348dc7469348dc746f37100c610f37100c63c22a9cb113c22a9cb0a37c369120a37c3695c725ffb135c725ffbf4748ad614f4748ad6cc6c340e15cc6c340eba88f69916ba88f699fb21fb9c 表1 16轮加密结果b) 随机改变m中的一个比特,用上述密钥k进行加密,并输出每一轮加密的64比特序列,与上一步的结果进行比较,你发现了什么?将明文:m=0123456789abcdef中第四位二进制改为1, 则明文变为:m=1123456789abcdef, 用相同的密钥加密,用红字标注出前6轮密文中与之前对应相等的位数,结果为:轮数密文轮数密文1f0aaf0aa5e1dec6325e1dec63a3e52c893a3e52c89ece9d0e24ece9d0e269dd75c5569dd75c5abc7850d6abc7850d0dc7cb6170dc7cb61a75af6488a75af64855f4cff9955f4cff92689ab42102689ab4249f546141149f546142dfdc287122dfdc287a924514013a924514098ab62f91498ab62f9d4c4149d15d4c4149dc833086f16c833086faae41685 表3 明文改变1bit后的16轮加密结果首先定性的可以明显看出:第一轮密文有1bit不相等: 即第二轮密文有7bit 不相等: 即 即 即 即 即 即为了说明弥散特性,对改变后的16轮密文与之前产生密文进行定量分析(相等位数检查程序见bitcheck.m):轮数相等位数轮数相等位数1632573424315306347358329311022112412301325143415311625 表4 明文改变1bit前后的16轮加密结果中相等比特位数由上表可以看出,随着轮数增加,初始明文1bit的改变对于密文的弥散效应越好。理论上,任意两个64位二进制序列相等时在相等位数为32时概率最大(每一位取0,1是等概率的), 因此在第四轮之后可认为弥散效应已经使得两组

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论