DES加密算法原理和实现过程

今天介绍一下加密算法,介绍一下自己的理解,可能会有不足,后续将会补充。
由于DES算法是一个典型的对称加密算法,故首先介绍一下对称加密算法。
对称加密算法概念:
顾名思义就是加密和解密过程使用的加密算法和解密算法是一样的,并且所需要的**也是一样的,这就要求接受方事先知道发送方的**,具体过程是数据发送方将明文(也就是原始数据)和加***一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。接受方收到密文后,使用加***和相同加密算法对密文进行解密,恢复出明文。这里可能有误区,为什么再进行一次就能恢复出明文呢?实际上这个加密算法是进行特殊处理过的,两次之后就能得到一模一样的数据。
DES加密算法原理和实现过程 左为发送方,右为接受方。

特点:算法公开,计算量小,加密速度快,加密效率高。
DES算法为对称加密算法的代表,虽然现在可以实现暴力**,但是对于我们研究其他改进的对称加密算法很有必要。
下面讲解一下DES加密算法原理
**由于大部分原始数据比较长,首先需要将数据切分成64位的明文分组。
**使用的**为64位,有效的**长度其实是56位(分成8段的,每段长为8位,每隔8位设置最后一位为校验位,采用的是奇偶校验法)。
**加、解密类似,但**的顺序正好相反。
**加密明文比较长,需要对DES加密进行反复迭代。
下面介绍需要理解的几个知识点:
**初始置换: **需要置换一下,因为对明文加密的时候需要这个**生成的16个子**进行加密,现在只需要理解下面这个过程生成了16个子**,需要在对明文加密的时候使用就可,里面也有几个置换表,这个也是设计好的。
DES加密算法原理和实现过程讲一下**初始置换过程:
1)首先将64位**按照置换选择1表(也称为pc-1表)进行置换,就是调换一下之前的排列位置。
2)将**从中间平均分为左右两部分,我这里用两个字母表示C0和D0(**每隔8位也有一个校验位,所以其实是56位有效数据,一分为二也就是28位),接着按照循环左移表进行左移(右侧的那张表),第一行和第三行为左移的次数(总计16次),第二行和第四行为左移的位数(有左移1位的,也有左移2位的,如表所示)。
3)循环左移之后生成了C2和D2,合并之后形成56位的**,经过置换选择2表,也就是PC-2表(注意PC-1表和PC-2表不同),经过置换变成48位的子**K1(后面加密明文要用)。
4)接着C1和D1继续循环左移,再经过PC-2表形成子**K2。
5)按照4步骤,直到生成子**K16为止。

IP初始置换: 有个IP初始置换表,这个是IBM公司设计好的,就是把64位的明文按照IP置换表进行位置的改变。
例如: 明文M=m1,m2,m3,…,m63,m64;
按照IP置换表,第58位应该换到第1位,第50位换到第二位……;
置换之后为 M’=m58,m50,…,m15,m17。
(只需理解意思就好,如果想详细了解那张表结构,可以去网上搜索)

下图为明文加密过程:
DES加密算法原理和实现过程
明文加密过程:
1)先将64位明文进行IP初始置换。
2)将置换后的明文平均分成左右两部分L0和R0(每个长度32位)。
3)之后对L0的加密需要用到R0的数据,以R0的数据和K1(上一幅图**经过16轮置换生成的16个子**中的K1)作为输入,输入到f函数生成的数据 (后面会将这部分,R0是32位的,需要进行扩展置换变成48位,与48位的子**K1进行异或运算,生成48的数据,这个数据需要进行S盒压缩变成32位的数据,再跟L0进行异或操作) ,最后生成32位的数据变成右侧R1;对于R0的数据保持不变,变成左侧的L1。
4)重复步骤3,经过16轮,最终生成R16和L16.
5)按照逆初始置换IP(也是一个置换表,将原先的位置改变),最后生成64位的密文,至此明文加密完成。
由上图可看出Li=Ri-1,Ri=Li-1⊕f(Ri-1,Ki)。

接下来讲这个f函数部分。
DES加密算法原理和实现过程f函数部分(也就是明文扩展置换):
可以看出明文加密过程只对左半部分加密,之后左右互换,再对左半部分加密,总计16次。
那么左半部分为32位,而子**为48位,他们怎么进行运算呢?下面我来讲讲。
1)由于只对左半部分加密,且加密之后再左右互换,所以前一步的明文的右半部分就是下一步明文的左半部分,即Li=Ri-1。
2)由于左半部分跟子**K位数不同,所以需要进行扩展置换E,使其与子**位数相同,才能进行异或运算(扩展置换其实就是将32的数据平均分为8部分,每部分4位,每部分添加2位,这就组成了48位)。
3)之后生成的48位数据与子**K进行异或运算。
4)再进行S盒压缩(其实就是将48位的数据平均分成8部分,每一部分减少2位,重新组成32位的数据)。
5)之后进行P盒置换(数据的位置发生相对移动),最终生成f(Ri-1,Ki)的最终数据。
6)再进行Li-1⊕f(Ri-1,Ki),生成的数据就是Ri。

解密过程与之类似,我们都知道一个数据与相同的数据进行两次异或,就能得到原始数据本身,解密就是使用的这个方法(可能大家忘了,可以拿两个运算一下,⊕为异或运算的意思)。
例如: P=1011,K=1101;
那么C=P⊕K=0110;
求得P=C⊕K=1011;

大致原理是:
加密过程: 密文C=明文P⊕**K;
解密过程: 明文P=密文C⊕**K;

DES算法的特点:
综合运用了许多次置换和替代技术,达到混淆和扩散的目的。
**扩散:将明文中的统计特性散布到密文中,使明文的每一部分影响密文中的多位。
**混淆:**和明文以及密文之间的依赖关系复杂化。
**采用乘积密码技术,将R0加密后的结果R1再作为L2的输入进行加密。

虽然DES算法很复杂,但是现在不到一个小时就能实现暴力**,但是这为后面学习其他算法提供了基础。