一:分组加密算法
1.1.概念
分组密码是将明文数字序列按照固定长度分组,并且用同一个密钥和同一个加密算法逐组加密,从而将各个明文分组变换成为密文分组的密码。
1.2.安全原则
(1)混乱原则:使得密文和对应明文和密钥之间的关系足够复杂,以至于密码分析者无法利用这种关系。
(2)扩散原则:使得每一个明文bit和密钥bit影响尽可能多的密文bit,用来隐藏明文的统计特性和结构规律。
二:DES设计背景(百度百科)
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。
三:DES算法特点总结
- DES为对称加密算法,使用同一个密钥来加密与解密
- 要求手法双方在加密和解密前约定密钥
- DES属于分组加密算法,该算法每次处理固定长度的数据段,称之为分组,其长度为分组长度
- DES分组大小为64bit,若加密数据长度不足64bit ,可以按照某种具体的规则填充
- DES采用56位密钥加密64位的明文数据块
- 当n个64bit数据块都经过DES加密后,所得的n个64bit密文快,串在一起就是密文输出
四:DES加密算法一般结构图
备注:DES加密算法大致包含初始(终止)置换+扩展置换+S盒压缩三个部分,下面将从详细讲解这三个部分。
4.1 初始置换和终止置换
先看看一下初始置换过程图
首先看一下初始置换表(8*8 64bit),第一位是58,,58表示输入的第58位换到第一位,第二位是50,50表示输入的第50位换到第二位,以此类推。原始数据经过初始置换表的置换,就会得到置换后的表格。
终止置换和初始置换是互逆的过程,即经过一次初始置换和一次终止置换,64位的二进制数据会别还原。
下面我们来做个例题巩固一下:
题目:当输入一个十六进制数,写出其终止置换输出
0x 0000 0080 0000 0002(十六进制)
解答:
先将输入的十六进制转化为二进制数及终止置换表如下图所示
我们可以看到,输入表中第25位和第63位是1,其余为0,所以重点考虑这两个位置即可,看终止置换表 第一个数字40表示,输入的第40个二进制数换在第一个位置,同理,第15个数字是63表示输入的第63个二进制数换在第15个位置,第64个位置是25,表示第25个输入的二进制数换在第64个位置。则可以得到经终止置换表置换后的64位数据为
转化为16进制为 0x 0002 0000 0000 0001 即为终止置换最后输出。
4.2 扩展置换过程(E盒)
经过初始置换的64bit数据分成两个部分,左侧32bit,右侧32bit 。其中一边32bit扩展为48bit数据,其实就是在某些位置添位操作。
同初始(终止)置换表一样,扩展置换也有一个扩展置换表,首先看一下扩展置换表
我们假设原始数据就是上面1101 0001 0011 0100 0010 0011 0011 1011的32bit数据,我们需要将其分为8组,每一组有4个元素,我们扩展就是将4个元素组扩展成为6个元素组,这样就完成了32到48位的转换。
经过一下步骤:
- 旧组的第一位复制到前一个新组的最后一位
- 旧组的最后一位复制到下一个新组的第一位
- 最后复制每个组中间的4个元素到新的表里面
这样就完成了从32bit到48bit的扩展置换过程。
4.3 S盒压缩处理
(1)经过扩展的48bit明文和48位密钥进行异或运算
(2)再使用8个S盒压缩处理得到32位数据,实际上将48个输入分成了8块,每一块都有6位,我们需要将这6位压缩成4位即可,在具体的处理过程中使用的是8张4行16列的表来进行压缩
例如:假设48位数据输入,分成8组,每组有6位
111111 100101 110011 001100 011001 010111 111011 011000
以第一组为例子 111111
原始数据:111111
- 取头尾两个数据组成一个组得到一个新的二进制数 11 ,转化为十进制 3 ,即为行数
- 取中间4个数据组成一个组得到一个新的二进制数 1111 ,转化为十进制 15 ,即为列数
- 查表 第 3行第15列查找得到 13
- 再把该S盒压缩处理压缩数转换为二进制输出 13--->1101
以上过程完成了从6位数据转化为4位数据的压缩,其他各组方法一致。
4.4 P盒置换
P盒置换是对S盒置换后的32bit数据的位置进行移动。
原理同初始置换,经过这个P盒置换之后,就会得到一轮运算中的最后输出。
撒花✿✿ヽ(°▽°)ノ✿!!!