运用Matlab实现DES算法.docx
- 文档编号:9542674
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:12
- 大小:126.76KB
运用Matlab实现DES算法.docx
《运用Matlab实现DES算法.docx》由会员分享,可在线阅读,更多相关《运用Matlab实现DES算法.docx(12页珍藏版)》请在冰豆网上搜索。
运用Matlab实现DES算法
运用Matlab实现DES算法
1、DES加密解密过程详解
2、DES算法理论图解
3、DES算法的应用误区
4、DES算法MATLAB程序实现演示
DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。
其密钥长度为56位,明文按64位进行分组,将分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。
DES加密算法特点:
分组比较短、密钥太短、密码生命周期短、运算速度较慢。
DES工作的基本原理是,其入口参数有三个:
key、data。
key为加密解密使用的密钥,data为加密解密的数据。
实际运用中,密钥只用到了64位中的56位,这样才具有高的安全性。
一、DES加密解密过程详解
1-1、变换密钥
1.1.1取得密钥
从输入密码中取得一个字符串长为7的密码,经过字符与二进制之间的转变,并加入偶校验位,组成64位密码
。
1.1.2等分密钥
去除64位密码中作为奇偶校验位的第8、16、24、32、40、48、56、64位,剩下的56位作为有效输入密钥。
分成均等的A,B两部分,每部分为28位,参照下表把输入密钥的位值填入相应的位置.按照表所示A的第一位为输入的64位密钥的第57位,A的第2位为64位密钥的第49位,...,依此类推,A的最后一位最后一位是64位密钥的第36位。
密钥初始置换表:
A:
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,
B:
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
1.1.3密钥移位
次数:
12345678910111213141516
左移:
1122222212222221
DES算法的密钥是经过16次迭代得到一组密钥的,把在1.1.2步中生成的A,B视为迭代的起始密钥,上表显示在第几次迭代时密钥循环左移的位数。
比如在第1次迭代时密钥循环左移1位,第3次迭代时密钥循环左移2位.第9次迭代时密钥循环左移1位,第14次迭代时密钥循环左移2位.
1.1.4密钥的选取
密钥56位到48位压缩置换表:
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在1.1.3步中第i次迭代生成的两个28位长的密钥为
把
合并以C(i)=A(i)B(i)。
按照上表所示k的第一位为56位密钥的第14位,k的第2位为56位密钥的第17位,...,依此类推,k的最后一位是56位密钥的第32位。
生成与进行第i次迭代加密的数据进行按位异或的48位使用密钥:
1.1.5迭代
DES算法密钥生成需要进行16次迭代,在完成16次迭代前,循环执行1.1.3-1.1.4步.最终形成16套加密密钥:
key[0],key[1],key[2],….key[14],key[15]。
1.2数据的加密操作
1.2.1取得数据
明文数据分成64位的数据块,不够64位的数据块以补“0”的方式填充。
1.2.2初始换位
明文初始置换表:
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,
按照上表所示把输入的64位数据的原第58位换到第一位,原第50位换到第二位,...,依此类推,最后的得到新的64位数据。
OldData
newData
1.2.3数据扩展
明文扩展置换表:
3212345
456789
8910111213
121314151617
161718192021
202122232425
242526272829
28293031321
第一次迭代以1.2.2步中生成的newData作为输入数据,第i(i>1)次迭代以第i-1次的64位输出数据为输入数据,把64位数据按位置等分成左右两部分:
保持left不变,根据上表把right由32位扩展成48位
把扩展后的48位right与第i次迭代生成的48位加密密钥进行按位异或操作
形成一个新的48位的right.
1.2.4数据压缩
选择函数S盒函数表:
S1:
14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,
0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,
4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,
15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,
S2:
15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,
3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,
0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,
13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,
S3:
10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,
13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,
13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,
1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,
S4:
7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,
13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,
10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,
3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,
S5:
2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,
14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,
4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,
11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3,
S6:
12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,
10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,
9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,
4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,
S7:
4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,
13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,
1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,
6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,
S8:
13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,
1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,
7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,
2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11,
在1.2.3步中形成了48位的right值,
需要把48位的right值转换成32位的right值.把right视为由8个6位二进制块组成,
a,b….h都是6位,强制转换成10进制整数的值都不大于64,a,b…h转成10进制整数后,在对应的表中根据转换后整数值取得对应位置的替代值:
a对应表S1,b对应表S2,c对应表S3
d对应表S4,e对应表S5,f对应表S6
g对应表S7,h对应表S8
在此以S1为例说明其功能,我们可以看到:
在S1中,共有4行数据,命名为0,1、2、3行;每行有16列,命名为0、1、2、3,......,14、15列。
现设输入为:
D=D1D2D3D4D5D6
令:
列=D2D3D4D5
行=D1D6
然后在S1表中查得对应的数,以4位二进制表示,此即为选择函数S1的输出,每6位用一个4位替换这样就完成了从48位向32位数据的转换。
1.2.5数据换位
p盒置换表
16,7,20,21,29,12,28,17,
1,15,23,26,5,18,31,10,
2,8,24,14,32,27,3,9,
19,13,30,6,22,11,4,25
把1.2.4步形成的32位right
根据上表进行转换:
数据的原第16位换到第一位,原第7位换到第二位,...,依此类推,最后得到新的32位数据。
1.2.6交换数据
把right和left按位异或后的值赋给right,然后将本轮输入的原始right值赋给left。
1.2.7迭代
DES算法需要进行16次迭代,在完成16次迭代前,把第i-1次得到的的left和right的值作为第i次的输入数据,重复1.2.3-1.2.6的步骤,但是有一点要记住:
在步骤1.2.3中第i次迭代要选择第i次迭代生成的密钥与数据进行按位异或。
1.2.8数据整理
明文末置换表
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
为保证加密和解密的对称性,DES算法的前15次迭代每完成一次迭代都要交换left和right的值,第16次迭代不交换两者的数值.到此把32位的left和right合并成64位的Data
根据上表重新调整Data的位值数据的原第40位换到第一位,原第8位换到第二位,...,依此类推,最后的得到新的64位。
Data即为密文。
1.3数据的解密
数据解密的算法与加密算法相同,区别在于1.2.3步中和数据进行按位异或的密钥的使用顺序不同,在加密中是按照第i次迭代就采用第i次迭代生成的密钥进行异或,而解密时第i次迭代就采用第15-i次迭代生成的密钥和数据进行异或。
二、DES算法理论图解
DES的算法是对称的,既可用于加密又可用于解密。
下图是它的算法粗框图。
其具体运算过程有如下七步。
三、DES算法的应用误区
DES算法具有极高安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。
而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒种检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间,可见,这是难以实现的,当然,随着科学技术的发展,当出现超高速计算机后,我们可考虑把DES密钥的长度再增长一些,以此来达到更高的保密程度。
由上述DES算法介绍我们可以看到:
DES算法中只用到64位密钥中的其中56位,而第8、16、24、......64位8个位并未参与DES运算,这一点,向我们提出了一个应用上的要求,即DES的安全性是基于除了8,16,24,......64位外的其余56位的组合变化256才得以保证的。
因此,在实际应用中,我们应避开使用第8,16,24,......64位作为有效数据位,而使用其它的56位作为有效数据位,才能保证DES算法安全可靠地发挥作用。
如果不了解这一点,把密钥Key的8,16,24,......64位作为有效数据使用,将不能保证DES加密数据的安全性,对运用DES来达到保密作用的系统产生数据被破译的危险,这正是DES算法在应用上的误区,留下了被人攻击、被人破译的极大隐患。
四、DES算法MATLAB程序实现演示
参考网上的一些说明和代码,本人用Matlab语言编写了的基于DES算法的,可以用于8个字符的加密,或者是种类文件的加密,都采用的是7个字符的密钥,DES_DEMO演示程序主界面如下图所示:
核心程序有8个M文件完成。
M文件功能说明:
4.1function[ef,result]=des(pf,pw,ind)
功能:
用密码pw对pf做des加密
输入:
pf一维向量64位二进制长8个英文字母长
pw一维向量56位二进制长7个英文字母长
ind实整数取值范围1-16指示返回第i轮加密过程相关中间值及结果
说明:
pf,pw要以字符串的形式输入。
输出:
er一维向量加密结果。
4.2functionki=gerki(k)
功能:
实现des加密过程中从56位的K密钥产生16个48位Ki子密钥
输入:
k56位长的行向量存储56位主密钥K
输出:
ki16*48的矩阵存储16个48位子密钥。
4.3functionnk=mr(k,n)
功能:
实现对输入向量k,循环左移n位
输入:
k一维向量
输出:
nk一维向量循环左移结果。
4.4functionbin=str2bin(str,k,flag)
功能:
字符串转二进制串,字符串中每个字符对应8位二进制字符
输入:
str字符向量ascii字符串
输出:
bin字符向量二进制字符串
flag正整数用以说明是否在二进制串中每隔k位加一位奇偶校验位,0表示不加,1表示加奇校验位,2表示加偶校验位
k正整数参与每次奇偶校验位运算的bit位数
说明:
当length(str)*8modk!
=0时,对bin二进制串最后length(str)*8modk位补零到k位后再做奇校验
4.5functionso=rebit(si,k)
功能:
将si中的位根据置换表k进行置换
输入:
si一维字符类型向量要做位置换处理的串
k一维字符类型向量置换表
输出:
so一维字符类型向量si置换后的结果
4.6functionso=sbox(si)
功能:
模拟si通过s盒处理
输入:
si一维向量48位长
输出:
so一维向量32位长
4.7functionstr=bin2str(bin)
功能:
二进制串转字符串,8位二进制字符对应字符串中一个字符
输入:
bin字符向量二进制字符串
输出:
str字符向量ascii字符串
4.8functionpf=dedes(ef,pw)
功能:
用密码pw对pf做des加密
输入:
ef一维向量64位二进制长8个英文字母长
pw一维向量56位二进制长7个英文字母长
说明:
ef,pw要以字符串的形式输入。
输出:
pf一维向量解密结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运用 Matlab 实现 DES 算法