软考信息安全工程师必会--3000+字文章浅析DES加密算法
创始人
2024-04-11 00:28:54
0

目录

前言

 什么是DES加密算法

整体流程

IP置换

子密钥K

压缩置换1

循环左移

拓展置换2

拓展置换E

 S盒代替

S1盒

S2盒

S3盒

S4盒

S5盒

S6盒

S7盒

S8盒

P盒置换

末置换


前言

🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。

🍁个人主页:红中

🫒每日emo:行书如行云流水

🍂我就不信我上不了热榜!!

 前几天背软考资料的时候,密码学那部分有个东西叫DES加密算法,书上讲得不太清楚,搜了很多博客也没看到完全讲解清楚的,今天我就出一篇,希望能让各位清楚明白

 什么是DES加密算法

DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。---------------------------------------------------------------------------------------------引自百度百科

那简单来叭叭两句,DES算法实际上就是

把64位明文输入块进行加密,输出64位密文输出块的算法

它使用的密钥也是64位的,其中56位为工作密钥,剩余8位为奇偶校验位。

DES算法整体来说用到了三个东西

分别是:

  1. Data
  2. Key
  3. Mode

各自对应着啥玩意呢:

  1. 数据:即输入的明文/密文64位数据,再说简单点,就是你想加密/解密的数据。
  2. 密钥:为7个字节共56位,如果像我前头说“密钥为64位”,那也是剩余8位为奇偶校验位。分别是第8,16,24,32,40,48,56,64位
  3. 模式:就是工作模式,总共就两种--加密/解密

至于DES加密算法的特点:

分组较短、密钥太短、密码生命周期短、运算速度较慢。

整体流程

 图片引自夏冰加密软件技术博客

首先如果是不了解密码学的哥们姐们,可能都会一脸懵(比如我

 

那么咱从上到下依次把每个步骤分析一下哈

IP置换

其实IP置换的原理很简单,只需要照着下面的表,把数填进去就行。

 没明白?那我举个栗子

假设我们要加密abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+=

就依次把数填进去

 全部填完之后,按照从左到右,从上到下的顺序整理即可

 那我们仔细看看这个表,发没发现点规律

 最右边那一列

依次是

2、4、6、8、1、3、5、7

然后是

10、12、14、16、9、11、13、15

那是不是可以这样看

 其实不用太在意这个规律 

 置换之后的数据为

5XPHzrjb7ZRJBtld91TLDvnf=3VNFxph4WOGyqia6YQI(i)Askc80SKCume+2UMEwog

在初始置换完成后,我们需要把数据一分为二

分别叫做L0,R0

L0 = “5XPHzrjb7ZRJBtld91TLDvnf=3VNFxph”

R0 = “4WOGyqia6YQI(i)Askc80SKCume+2UMEwog”

再看看这个图,生成L0、R0之后,R0直接成为新一轮的L1,同时对R0通过函数f、子密钥K进行处理,而后将处理得到的数据与L0进行异或运算,结果即为新的R1

接着往下走,就到了最复杂的地方

子密钥K

 图片来自博客园

从流程图我们要思考一下,这个K是怎么从64位到56位的呢?

这就涉及到了压缩置换1。

压缩置换1

首先前面提过,有八位是奇偶校验位,按64位分成8个字节一组,共八组,取出每一组的最后一位,变成56位

然后类似于初始置换,根据下面的子密钥交换规则表,将数据填到对应的位置即可

 填完之后

将56位数据一分为二,分别称为C0、D0

循环左移

然后我们需要通过循环左移,但是左移的时候,位数还不能变,所以就要把左移出去的头部数据接回尾部,类似于一个闭环。

 但是左移的位数也不是不变的,需要根据循环的轮数相应移位

 左移之后C0、D0变为C1、D1

然后将C1、C2合并回56位的数据

当然,还没完,还有个压缩置换2

拓展置换2

 由图表可知,这次要去除位数为9的倍数的数字,填进去输出来,得到K1

拓展置换E

拓展置换E主要用于在输入数据刚刚进行van♂初始置换后,将数据分为L0、R0后,对R0进行操作。

按照下表先将数据填写完毕,然后聊聊这个红色字体该怎么处理

 

对于红色字体的处理,即将对应标号的一整行拼接到相应位置,例如下图

 拿上面的R0 = “4WOGyqia6YQI(i)Askc80SKCume+2UMEwog”举例(别忘了R0是由64位的R分出来的,正好32位

首先填写下面的这部分

填完之后,在左右两侧补上,类似于下图

 

 稍微画一下,不然全画太乱了,相信你们会理解我的

 拓展后便得到了48位的R0

然后进行K1与R0的异或运算

 S盒代替

S盒的作用就是把上面的48位数据压缩为32位

S1盒

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

14

4

13

1

2

15

11

8

3

10

6

12

5

9

0

7

1

0

15

7

4

14

2

13

1

10

6

12

11

9

5

3

8

2

4

1

14

8

13

6

2

11

15

12

9

7

3

10

5

0

3

15

12

8

2

4

9

1

7

5

11

3

14

10

0

6

13

S2盒

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

15

1

8

14

6

11

3

4

9

7

2

13

12

0

5

10

1

3

13

4

7

15

2

8

14

12

0

1

10

6

9

11

5

2

0

14

7

11

10

4

13

1

5

8

12

6

9

3

2

15

3

13

8

10

1

3

15

4

2

11

6

7

12

0

5

14

9

S3盒

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

10

0

9

14

6

3

15

5

1

13

12

7

11

4

2

8

1

13

7

0

9

3

4

6

10

2

8

5

14

12

11

15

1

2

13

6

4

9

8

15

3

0

11

1

2

12

5

10

14

7

3

1

10

13

0

6

9

8

7

4

15

14

3

11

5

2

12

S4盒

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

7

13

14

3

0

6

9

10

1

2

8

5

11

12

4

15

1

13

8

11

5

6

15

0

3

4

7

2

12

1

10

14

9

2

10

6

9

0

12

11

7

13

15

1

3

14

5

2

8

4

3

3

15

0

6

10

1

13

8

9

4

5

11

12

7

2

14

S5盒

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

2

12

4

1

7

10

11

6

8

5

3

15

13

0

14

9

1

14

11

2

12

4

7

13

1

5

0

15

10

3

9

8

6

2

4

2

1

11

10

13

7

8

15

9

12

5

6

3

0

14

3

11

8

12

7

1

14

2

13

6

15

0

9

10

4

5

3

S6盒

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

12

1

10

15

9

2

6

8

0

13

3

4

14

7

5

11

1

10

15

4

2

7

12

9

5

6

1

13

14

0

11

3

8

2

9

14

15

5

2

8

12

3

7

0

4

10

1

13

11

6

3

4

3

2

12

9

5

15

10

11

14

1

7

6

0

8

13

S7盒

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

4

11

2

14

15

0

8

13

3

12

9

7

5

10

6

1

1

13

0

11

7

4

9

1

10

14

3

5

12

2

15

8

6

2

1

4

11

13

12

3

7

14

10

15

6

8

0

5

9

2

3

6

11

13

8

1

4

10

7

9

5

0

15

14

2

3

12

S8盒

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

13

2

8

4

6

15

11

1

10

9

3

14

5

0

12

7

1

1

15

13

8

10

3

7

4

12

5

6

11

0

14

9

2

2

7

11

4

1

9

12

14

2

0

6

10

13

15

3

5

8

3

2

1

14

7

4

10

8

13

15

12

9

0

3

5

6

11

 将得到的R0平均分为8组,每组对应一个S盒, 每一组的数据长度为6位

假设第一组的二进制数据为:“101010”
 那么,我们取第一位与最后一位,组成十进制行数:“10”=2
 然后取中间四位,组成十进制列数:“0101”=5
 那么,在对应的S1盒中,取2行5列的数据:6
 再将取得的数字转换为2进制:“0110”
 将这个得到的4位二进制数据,代替原来第一组的6位数据,这样一来,等8个S盒全部代替完毕,我们就得到32位的数据。

 S盒置换完成后,就要进行P盒置换。

P盒置换

输入32位,输出32位(图源百度百科

填完之后,我们终于得到了f(R0,K1)

再与L0进行异或运算,得到了第一轮运算最终的R1,然后再将R0的值赋给L1,就完成了第一轮的运算,得到了L1,R1。

 经过16轮的运算,我们终于得到了最终的L16、R16

最后将二者合并起来,但是合并时需要将两数据调换位置

也就是R16L16,合并之后就得到了64位的数据。

最后进行末置换

末置换

按图表位置填写对应数据即可 

 最后吐个槽,我想上热榜。。。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...