基于Matlab的DES算法.docx

上传人:b****2 文档编号:1260828 上传时间:2022-10-19 格式:DOCX 页数:11 大小:160.82KB
下载 相关 举报
基于Matlab的DES算法.docx_第1页
第1页 / 共11页
基于Matlab的DES算法.docx_第2页
第2页 / 共11页
基于Matlab的DES算法.docx_第3页
第3页 / 共11页
基于Matlab的DES算法.docx_第4页
第4页 / 共11页
基于Matlab的DES算法.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

基于Matlab的DES算法.docx

《基于Matlab的DES算法.docx》由会员分享,可在线阅读,更多相关《基于Matlab的DES算法.docx(11页珍藏版)》请在冰豆网上搜索。

基于Matlab的DES算法.docx

密码学与网络安全课程实验

利用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.1DES算法实现

a)算法实现方案

Matlab(矩阵实验室)是一款工程计算用的软件,功能十分强大。

Matlab的计算基于矩阵,而DES算法用矩阵描述是十分简洁方便的。

因此,选用Matlab作为算法实现语言,基于一系列的矩阵变换、运算来实现DES算法的加密。

b)主要功能实现流程及代码解析

1)加密程序

图1DES基本结构

DES算法的结构非常简单,是一个16次的迭代。

核心是函数中一系列变换。

根据算法框图,程序步骤主要分为三大部分:

1)输入明文和密钥进行字符转换

2)产生16轮密钥矩阵

3)16轮迭代

%%demo5.m

clc,clearall;

%%

%----------第一步输入明文和密钥-------------%

M='0123456789ABCDEF';%

K='0123456789ABCDEF';%

MB=[];

fori=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];

end

M=MB;%转化为64位二进制明文

KB=[];

fori=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];

end

K=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);%初始矩阵变换64to56

%循环移位>>>>>

shift_array=-[1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1];

C(1,:

)=KEY0(1:

28);%C0

D(1,:

)=KEY0(29:

56);%D0

fori=2:

17

C(i,:

)=circshift(C(i-1,:

)',shift_array(i-1))';%前28位循环移位%circshift是右移移动负数位表示左移

D(i,:

)=circshift(D(i-1,:

)',shift_array(i-1))';%后28位循环移位

end

PC2=[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*56

KEY_MAT=KEY_MAT(2:

17,:

);%16*56

PC_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];

fori=1:

16

Ki(i,:

)=KEY_MAT(i,PC_2);

end

KEY=Ki;

%%

%----------第四步Feistel结构-------------%

IP=[58504234261810260524436282012462544638302214664564840322416857494133251791595143352719113615345372921135635547393123157];

%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轮迭代>

fori=2:

16

[L,R]=fchange(L,R,i,KEY);

mi=[L,R];

mi2_hex(i,:

)=mi

end

IP_1=[40848165624643239747155523633138646145422623037545135321612936444125220602835343115119592734242105018582633141949175725];

%%IP_1初始逆置换矩阵

m16=[R,L];%最后一步进行交换

C=m16(IP_1);%IP逆置换

[m_hex]=m_2_hex(C)%转化为16进制输出密文%%

%%fchange.m

function[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扩展OKRi_1_ex2=reshape(Ri_1_ex',1,48);%将扩展的48位变为向量OKf=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))];

%省略s2~s8盒

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

图2DES_demoGUI界面

解密:

在程序demo5_inv.m中输入64比特密文及64比特密钥:

M='56CC09E7CFDC4CEF';

K='0123456789ABCDEF';

运行:

m_hex=0123456789ABCDEF

将密文解密后与初始明文一致。

为了证明程序对DES算法的正确实现,用密码学习软件Cryptool进行了验证。

加密结果与本程序一致。

图3CrypTool加密结果

3.2DES弱密钥验证

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='FE01FE01FE

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1