基于Matlab的DES算法Word文档下载推荐.docx

上传人:wj 文档编号:6996477 上传时间:2023-05-07 格式: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_第6页
第6页 / 共11页
基于Matlab的DES算法Word文档下载推荐.docx_第7页
第7页 / 共11页
基于Matlab的DES算法Word文档下载推荐.docx_第8页
第8页 / 共11页
基于Matlab的DES算法Word文档下载推荐.docx_第9页
第9页 / 共11页
基于Matlab的DES算法Word文档下载推荐.docx_第10页
第10页 / 共11页
基于Matlab的DES算法Word文档下载推荐.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于Matlab的DES算法Word文档下载推荐.docx

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

基于Matlab的DES算法Word文档下载推荐.docx

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

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'

FE01FE01FE01FE01'

可以看出,一对半弱密钥能够互相加解密。

3.3DES算法初步应用

a)任意选定一个长度大于8个字符的字符串,设计一种方法对这个字符串进行加密

用电码本模式ECB直接对明文分成以64位一组的块,这里用密文分组链接模

式CBC来实现。

算法步骤:

1)对任意长(mbit)明文分成N组,每组64bit

2)初始向量IV与第一组明文异或

3)第i-1组密文与第i组明文异或作为DES的输入明文

4)迭代N-1次

5)得到N*64bit密文,截取为mbit

算法框图为:

图4DES_CBC模式基本结构

程序编写主要实现对任意长明文分组,以及对DES外围结构的改变。

主要代码如下:

0123456789ABCDEF0123456789ABCD0123456789ABCDEF0123456789ABCD'

%任意长明文

%密钥

IV='

11223344AABBCCDD'

%初始向量

%*****明文分组»

»

a=ceil(length(M)/16);

%向上取整

MB=M;

16*a-length(M)

MB=[MB'

0'

];

Mi=[];

forj=1:

a

Mi(j,:

)=MB((16*j-15):

16*j);

M=bitxor(M,IV);

%算法核心是先按位异或再输入DES

程序见mydes.m,demo5_CBC.m。

运行,得密文:

C_CBC=

21BC605D513B38E8D8EF6671D93179070D7E6266C1FA5A5210099C143D26

与明文等长(60*4bit)。

b)分析你所设计的这种方法有什么优点和/或缺点

CBC算法的优点很明显能有效地避免ECB对明文统计特征的泄漏,因为同一明文块输入DES中的实际明文是不一样的。

CBC算法的缺点也是很明显的,由于其算法结构的限制,CBC不能实现并行运算,且误差传递效应比ECB差,一个密文块损坏,会引起两个明文块损坏。

3.4DES弥散特性分析

a)选择任意64比特明文m,选择任意56比特密钥k进行加密,并输出每一轮加密的64比特序列

选定明文和密钥,依次输出每一轮加密输出的密文:

明文:

密钥:

每一轮的加密结果如下表所示:

轮数

密文

1

F0AAF0AA5E1CEC63

2

5E1CEC6382E13C49

3

82E13C49499542F9

4

499542F90DD64AFB

5

0DD64AFB7036043B

6

7036043BF1470BC2

7

F1470BC2394C8F45

8

394C8F45348DC746

9

348DC746F37100C6

10

F37100C63C22A9CB

11

3C22A9CB0A37C369

12

0A37C3695C725FFB

13

5C725FFBF4748AD6

14

F4748AD6CC6C340E

15

CC6C340EBA88F699

BA88F699FB21FB9C

表116轮加密结果

b)随机改变m中的一个比特,用上述密钥k进行加密,并输出每一轮加密的64比特序列,与上一步的结果进行比较,你发现了什么?

将明文:

中第四位二进制改为1,则明文变为:

1123456789ABCDEF'

,用相同的密钥加密,用红字标注出前6轮密文中与之前对应相等的位数,结果为:

F0AAF0AA5E1DEC63

5E1DEC63A3E52C89

A3E52C89ECE9D0E2

ECE9D0E269DD75C5

69DD75C5ABC7850D

ABC7850D0DC7CB61

0DC7CB61A75AF648

A75AF64855F4CFF9

55F4CFF92689AB42

2689AB4249F54614

49F546142DFDC287

2DFDC287A9245140

A924514098AB62F9

98AB62F9D4C4149D

D4C4149DC833086F

C833086FAAE41685

表3明文改变1bit后的16轮加密结果

首先定性的可以明显看出:

第一轮密文有1bit不相等:

第二轮密文有7bit不相等:

为了说明弥散特性,对改变后的16轮密文与之前产生密文进行定量分析(相

等位数检查程序见bitcheck.m):

相等位数

63

57

42

31

30

34

35

32

22

24

25

表4明文改变1bit前后的16轮加密结果中相等比特位数

由上表可以看出,随着轮数增加,初始明文1bit的改变对于密文的弥散效应越

好。

理论上,任意两个64位二进制序列相等时在相等位数为32时概率最大(每一位取0,1是等概率的),因此在第四轮之后可认为弥散效应已经使得两组64位二进制序列不具有相关性。

这些结论充分说明,1bit明文的改变对于密文的改变影响是很大的。

c)对明文m,随机改变k的一个比特,并以此进行加密,同样输出每一轮的64比特序列,与第一步中的结果进行比较,你发现了什么?

将密钥:

k='

中第四位二进制数改为1,则密钥为:

,输入相同的明文,用红字标注出前2轮密文中与之前对应相等的位数,结果为:

F0AAF0AA5F18EC63

5F18EC6382A82D5D

82A82D5D49A47B98

49A47B98B918F4AD

B918F4ADBEB55997

BEB5599751D27C9E

51D27C9E0D1B52DF

0D1B52DF1F1F5460

1F1F54603AA16D15

3AA16D15DBC7BB1E

DBC7BB1ED19C8AD1

D19C8AD1CF57EA82

CF57EA82F6DA759D

F6DA759D30E6B261

30E6B26198CA7A01

98CA7A0149C4EF99

表5密钥改变1bit后的16轮加密结果

同样进行弥散特性的定量分析:

62

55

47

28

33

29

36

41

表6密钥改变1bit前后的16轮加密结果中相等比特位数

与a)和b)中结果比较,1bit密钥的改变对于密文的改变影响同样是很大的。

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

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2