DES加密
一. DES加密流程
1. 初始置换
根据初始置换表,对输入的64位的明文按照比特位数进行替换。
即加密和解密的时候应该是一张8*8的表来进行替换。
2. f运算
f运算的参数为每一轮的密钥k和上一轮的R。
对于32位的输入数据首先经过拓展变换得到48位的数据,然后与48位的密钥异或,所得到的结果按照6比特的依次分为8个分组。将8个6比特的数据分别作为8个S盒的输入,得到8个4比特共32比特的输出,最后对输出的结果做置换变换P,得到f函数的输出。
(1) S盒代替
- 我们前面扩展置换后得到的R0是48位的数据,我们的S盒有8个,那么我们就需要将得到的R0平均分为8组,每组对应一个S盒。
- 每一组的数据长度为6位,假设第一组的二进制数据为:“100110”
- 那么,我们取第一位与最后一位,组成十进制行数:“10”=2
- 然后取中间四位,组成十进制列数:“0011”=3
- 那么,在对应的S1盒中,取2行3列的数据(第3行第4列):8
- 再将取得的数字转换为2进制:“1000”
- 将这个得到的4位二进制数据,代替原来第一组的6位数据,这样一来,等8个S盒全部代替完毕,我们就得到32位的数据。
(2)P盒置换
P盒是一个代替的过程,当进行替换的时候基于P盒的下标进行替换,比如a对应16就是第16个即P.
3. 密钥生成算法
(1). 压缩置换1
(2). 循环左移
每一轮循环左移的位数是不同的:
(3). 压缩置换2
二. DES加密算法
DES加密算法实现: DES加密算法实现(C++) (gitee.com)