分组密码的原理
DES是分组密码,分组密码将消息进行等长分组,使用同一密钥对每个分组进行加密。
DES算法
- DES是一个迭代分组密码,使用64位长的密钥加密64位长的明文,获得64位长的密文,使用轮函数是Feistel,迭代16轮。
- 加密流程:明文(64位)->初始置换ip->16轮Feistel->逆初始置换ip->密文(64位)
流程
1.给定一个明文m,首先通过一个固定的初始置换ip得到m0,然后将m0分为左右两部分,即m0=L0+R0,分别为m0的左右两部分,均为32位。ip置换的作用是使打乱原来的顺序。
初始ip置换表:
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,
2.使用密钥对R0和L0进行16轮迭代运算,运算规则:
adaf2edda3cc7cd9ca7533aa3901213fb80e916c.jpg
3.DES的核心是非线性函数f,函数的输入有两个变量,一个是32bit的Ri-1,另一个是48bit的ki-1,输出的结果为32bit。
4.首先利用扩展置换E,将Ri-1扩展成一个48bit的串,然后将扩展后的结果和ki进行异或运算,将所得到得结果48bit分成8个6bit的串
IMG_20190510_154656.jpg
5.将上步得到的8个6bit的串,分别作为S盒的输入,每个S盒都将6bit的消息映射成一个4bit的消息,X1X6转换成十进制,对应表中的行号,X2X3X4X5转换成十进制,对应于表中的列号,通过对比S盒返回一个数字,将数字转换为四个二进制表示的数。
IMG_20190510_154714.jpg
6.运行完8个S盒后,返回32bit的串,再将这32bit使用P置换,即可得到f函数的输出。
7.最后一轮迭代,左右两个32bit并不叫唤,再对R16L16进行ip逆置换,即可得到密文c。
IMG_20190510_154726.jpg