概要
前三章主要讲了3种常用的摘要算法,而本章将开始讲对称加密算法。对称加密的加密密钥和解密密钥都是相同的,安全性依赖两个因素,即加密算法足够强和密钥的秘密性。DES作为最古老的常见的对称加密算法就先讲下,DES全称Data Encryption Standard(数据加密标准),是一种标准的对称加密算法,密钥是64bit(其中8个校验位不参与DES运算),原文64位,当然,原文不是64位的倍数也行,怎么填充数据DES算法并没有规定,需要开发者自己填充到64的倍数以及循环调用DES加密解密数据。
步骤
该算法步骤:置换位置、子密钥生成、轮函数处理、逆置换、输出结果。具体如下:
1、置换位置:将64bit原文数据调换位置,具体规则如下:
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
即置换后明文第1位是原明文的第58位,第2位是原明文50位...第64位是原明文第7位。再将之分成两个长度为28的明文L0和R0。
2、子密钥生成:子密钥生成步骤如下
![](https://img-blog.csdnimg.cn/img_convert/b8fdf41fb4a3a71a132e293aa335fb28.png)
初始密钥去除校验位以及经过PC-1表调换位置后得到56位密钥,再分成C0和D0两部分各28位,再进行左移(左移位数与循环次数有关),再根据PC-2表进行缩小调换位置得到48位的子密钥K(i)。
3、轮函数处理:将第一步生成的L0和R0以及子密钥做为输入,经过轮函数的异或等运算,输出L1和R1,再重新生成子密钥,新的L1和R1以及密钥K1进行第二次轮函数运算,一共循环16次。
4、逆置换:将最后的L15以及R15交换位置,然后根据第一步的置换表进行逆置换得到密文。
5、输出:输出二进制数据或16进制字符。
优缺点
优点:加密解密速度快
缺点:安全性很差
使用场景
由于弱密钥以及密钥短的缘故,容易被破解,安全性差,现在基本没有哪种场景是使用DES的。