前言:
本期技术分享将与大家以“DES算法详解”为主题,通过剖析其加密、分割压缩、密钥生成等过程,与大家共同探讨如何利用DES加密算法对数据进行加密解密。
(一)术语释义
1. DES(Data Encryption Standard)数据加密标准
DES是由IBM公司研制的一种对称加密算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准。
DES是一个分组加密算法,就是将明文分组进行加密,每次按顺序取明文的一部分。一个典型的DES以64位为分组,加密解密用算法相同。它的密钥长度为56位,因为每组第8位是用来做奇偶校验,密钥可以是任意56位的数,保密性依赖于密钥。
2. 密钥:8个字节共64位的工作密钥(决定保密性能)。
3. 明文:8个字节共64位的需要被加密的数据。
4. 密文:8个字节共64位的需要被解密的数据。
DES算法属于对称加密算法中的分组加密算法(也称块加密) ,对应着流密码加密形式(流密码即对逐个字节进行加密)。
![](http://dingyue.ws.126.net/2023/0208/2e58b659j00rpr2e7004kd000sk00cup.jpg)
(二)加密过程
![](http://dingyue.ws.126.net/2023/0208/71fca6f0j00rpr2f5002zd000hz00j5p.jpg)
其中K1为48bit的秘钥,每轮循环的key都不一样。
IP:置换
IP -1 :逆置换
![图为16轮循环过程](http://dingyue.ws.126.net/2023/0208/5208f979j00rpr2fr0049d000po00eap.jpg)
(1)因为k1-16的秘钥均为48位,但是R0为32位,所以首先需要经过E盒的扩展,得到48bit的R0数据。
(2)与48bit的key1进行异或,再经过S盒进行压缩,将48bit的数据压缩为32bit。
(3)经过p盒置换得到值后,再去l0异或。
![](http://dingyue.ws.126.net/2023/0208/b540854ap00rpr2hj0018d000as002gp.png)
(三)流程详细剖析
1. 初始置换,表格如下所示。第一个为初始置换表,第二个为逆置换表。
![](http://dingyue.ws.126.net/2023/0208/99da55f6j00rpr2ij004nd000lo00afp.jpg)
举例:初始置换的第一个数字是58,代表的是把现在数据64bit的第58位换到数据的第一位。
![](http://dingyue.ws.126.net/2023/0208/de0d6b4ej00rpr2j60086d000nk00dap.jpg)
2.轮函数-E盒子扩展,目标将32位的输入扩展为48位的输出,以此和秘钥进行计算。
3.如下图显示,中间为原本的32位,外面两列为新增。
![](http://dingyue.ws.126.net/2023/0208/01c9948aj00rpr2jr005md000v9009np.jpg)
4.举例分析。
(1)原始数据如下显示。
![](http://dingyue.ws.126.net/2023/0208/98da3233p00rpr2kd000td000ag003jp.png)
(2)经过扩展后,数据如下显示。
![](http://dingyue.ws.126.net/2023/0208/453e19dej00rpr2kx009hd000v900g3p.jpg)
(3)扩展方式如下,扩展的来源和原数据一致。
![](http://dingyue.ws.126.net/2023/0208/95b31987j00rpr2lr0096d000v9009up.jpg)
(4)此时扩展完毕后,再去进行秘钥进行异或。异或后的结果再进行S盒压缩处理,48bit分割为8块,每块6bit。
![](http://dingyue.ws.126.net/2023/0208/1c5bfac5j00rpr2mc0071d000v900bwp.jpg)
4.具体分割压缩过程如下图举例所示。
![](http://dingyue.ws.126.net/2023/0208/4728b36bj00rpr2nh004xd000v900aap.jpg)
(1)根据行数、列数到下表中对应寻找,结果显示为13。
![](http://dingyue.ws.126.net/2023/0208/62b70873j00rpr2o300o0d000r700ovp.jpg)
(2)得到32bit数据后,再经过p盒的计算,得到相同结果。提取目标第16位数据,并前移至第一位。
![](http://dingyue.ws.126.net/2023/0208/cdb6d0f2j00rpr2ot005pd000v900fwp.jpg)
(3)至此,一轮循环已经完成。得到的结果需要和l0异或结果赋给R1进行16次迭代运算,得到了R16和L16,将两者拼接到一起后再进行逆置换,即可得到最终密文。
(四)密钥生成过程
![](http://dingyue.ws.126.net/2023/0208/77de848bj00rpr2pt0043d000sq005bp.jpg)
![](http://dingyue.ws.126.net/2023/0208/cd0e2879j00rpr2t5005td000ke00dup.jpg)
1. 64位密钥经过PC-1表置换得到56位的密钥。
![](http://dingyue.ws.126.net/2023/0208/e911d087j00rpr2to002hd0009w0098p.jpg)
2.将56 bit数据再分割为两个C1和D1各28bit,并通过下面的移位次数表,循环共16次迭代及按照表格所示进行左移。
![](http://dingyue.ws.126.net/2023/0208/2d1fdfe7j00rpr2uh0022d000qa004ap.jpg)
3.最终C1和D1将会生成一个新的结果,将其拼接后,再经过下图PC-2置换表的置换,即可得到第一轮的秘钥48bit。
![](http://dingyue.ws.126.net/2023/0208/fd0c34b2j00rpr2vl002od0009i00aop.jpg)
![](http://dingyue.ws.126.net/2023/0208/5d1cc676j00rpr2w4008td000v900evp.jpg)
(五)关于校验位的概念
![](http://dingyue.ws.126.net/2023/0208/ab2fa49cj00rpr313002cd000n800hfp.jpg)
![](http://dingyue.ws.126.net/2023/0208/ac6c29cdp00rpr320000td000ni003fp.png)
(六)DES算法
![](http://dingyue.ws.126.net/2023/0208/c749285bj00rpr333000vd000n700c2p.jpg)
![](http://dingyue.ws.126.net/2023/0208/c749285bj00rpr33s000vd000n700c2p.jpg)
热门跟贴