基于Matlab的DES算法Word文件下载.docx

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

基于Matlab的DES算法Word文件下载.docx

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

基于Matlab的DES算法Word文件下载.docx

a)算法实现方案

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

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

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

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

1)加密程序

图1DES基本结构

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

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

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

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

2)产生16轮密钥矩阵

3)16轮迭代

%%demo5.m

clc,clearall;

%%

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

M='

0123456789ABCDEF'

;

%

K='

%

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

Ki=K(i);

KBi=['

dec2bin(hex2dec(Ki))];

KBi=KBi(end-3:

KBi=[str2num(KBi

(1)),str2num(KBi

(2)),str2num(KBi(3)),str2num(KBi(4))];

KB=[KB,KBi];

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,:

%后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:

Ki(i,:

)=KEY_MAT(i,PC_2);

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

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

mi=[L,R];

mi2_hex(i,:

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

dec2bin(f2)];

%%字符串处理

f2_bin=f2_bin(end-3:

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;

%交换位置

程序见demo5.m。

2)解密程序

DES算法设计巧妙也体现在其解密过程非常简单,结构和加密算法完全一样,只需要将16轮加密所用的密钥完全倒过来。

对密钥矩阵16X64的行倒序排列,得到倒过来后的密钥矩阵。

其余部分与解密程序

保持一致即可。

解密时,输入密文和密钥,得到明文。

程序见demo5_inv.m。

c)加密64比特明文,对密文进行解密得到明文,观察是否与初始明文一致

加密。

这里用Matlab中的GUI界面编写了加解密的交互程序。

交互程序见desecb.m。

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

运行:

m_hex=56CC09E7CFDC4CEF

图2DES_demoGUI界面

解密:

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

56CC09E7CFDC4CEF'

m_hex=0123456789ABCDEF

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

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

加密结果与本程序一致。

图3CrypTool加密结果

3.2DES弱密钥验证

a)用选定的弱密钥进行两次加密,观察得到的结果

用已知四个弱密钥中的一个’FFFFFFFFFFFFFFFF’,对'

进行加

密:

FFFFFFFFFFFFFFFF'

m_hex=6DCE0DC9006556A3

再次加密:

6DCE0DC9006556A3'

m_hex=0123456789ABCDEF

可以看出,两次加密后密文和第一次的初始明文一样,相当于是加密后再解密。

验证了弱密钥。

b)用选定的非弱密钥进行两次加密,观察得到的结果

用已知四个半弱密钥中的一个‘01FE01FE01FE01FE’和对'

进行加密:

M='

K='

01FE01FE01FE01FE'

m_hex=8A76C7A4F16D47ED

再用与‘01FE01FE01FE01FE’对应的半弱密钥FE01FE01FE01FE01FE01’加密:

8A76C7A4F16D47ED'

FE01FE01FE

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

当前位置:首页 > 高中教育 > 高中教育

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

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