DES加密算法

本文主要参照哔站博主可 可厉害的土豆 所作笔记,博主讲的很好,具体可参照 DES加密

一、DES算法简介

  DES(Data Encryption Standard)加密算法属于对称加密(对应于非对称加密)算法中的分组加密(对应于流密码)算法。

  所谓对称加密,即加密与解密所用的密钥是相同的,而非对称加密中,存在公钥与私钥,公钥可解密私钥加密的数据,私钥可解密公钥加密的数据。

  所谓分组加密(又叫块加密),是将明文分为字节块,然后对每个字节块进行加密最终拼接在一起得到密文(DES算法分组大小是64位),流密码是按照一个字节一个字节进行加密。

二、DES算法流程简介

DES加密算法流程:

  1. 对明文进行IP置换。
  2. 将 64bit 明文数据左右对半分为 L 0 L_0 L0(32bit) 与 R 0 R_0 R0(32bit) 两部分。
  3. R 0 R_0 R0 直接赋值给 L 1 L_1 L1
  4. L 0 L_0 L0 f ( R 0 K 1 ) f(R_0 K_1) f(R0K1) 的值赋值给 R 1 R_1 R1
    (1). 对于 f f f 函数,首先使用 E 扩展将 32 位明文转换为 48 位。
    (2). 然后用明文与所给的密钥 K K K 进行异或。
    (3). 通过 S 盒将文段压缩为 32 位。
    (4). 再对文段进行 P 置换。
  5. 对2~4过程进行16轮。
  6. IP逆置换得到密文。

具体算法流程如下面图示:

三、DES算法具体执行过程

1. IP置换

IP 置换是指按照一定的规则,将原来的64位二进制重新排序,具体置换表如下图所示:
在这里插入图片描述

  图中的的 Initial Permutation 对应为最开始的 IP 置换表,Final Permutation对应为最后的逆置换表。
   Initial Permutation表中第一个数字 58 表示将原始明文中的 58 位放到当前的第一位,第二个数字50表示将原始明文中的50位放到当前的第二位…以此类推,通过置换表将原始明文进行置换。
具体可参见一下实例:
在这里插入图片描述

2.轮函数–E扩展置换

  E 扩展置换主要功能是将 32 位的输入扩展为 48 位输出(使 32 位的 R 0 R_0 R0 能够与 48 位的 K 进行异或操作),具体操作过程可参照下图:
在这里插入图片描述

  上图中的表与前面所讲的置换表功能类似,表中对应的数字 i 代表将32位的文段中第 i 位的二进制写入 i 在表中的位置。
  扩展的过程也可以通过图中下方的图的规律的到,即将 32 位的文段分为 8 块,将这八块二进制文段循环排列,将每一块的最后一位放到后一块的最前面,将每一块的最前一位放到前一块的最后面,这样每一块就多加了两位,8 块总共增加了 16 位,所以文段就由原来的 32 位扩展成了 48 位。

具体例子如下图所示:

原始数据:

扩展之后的数据:

在这里插入图片描述

得到以上 48 位的数据之后,即可与密钥 K 进行异或操作了。

3.轮函数–S盒压缩处理

  S盒压缩处理即是将异或操作得到的 48 位数据压缩为 32 位,具体操作如下:
在这里插入图片描述

  1. 将 48 位的数据分为 8 块 6 位的数据。
  2. 将每块 6 位数据的头和尾二进制数转换成十进制数记为行数,将中间的四位二进制数据转换成十进制记为列数。
  3. 然后通过下面的表格,根据行数和列数找到对应的十进制数,然后将该十进制数转换为四位二进制。
  4. 原来的 6 位二进制数转换成了 4 位,每块少了两位,共 8 块,在48位的基础上少了 16 位,即将原来的 48 位二进制数压缩成了32位。
    在这里插入图片描述
    具体实例可参照下图:
    在这里插入图片描述

按照上面的表格得到 3 行 15 列数据为 13,然后将13转换为二进制即得到压缩后的数据:

在这里插入图片描述

4.轮函数–P盒置换

  P盒置换操作与之前的初始置换操作相同,其置换表如下所示:
在这里插入图片描述
将 P 盒置换后的数据与 L 0 L_0 L0 进行异或操作后即得到了 R 1 R_1 R1 ,对以上过程重复进行 16 次即可得到 L 16 L_{16} L16 R 16 R_{16} R16 ,然后对 L 16 L_{16} L16 R 16 R_{16} R16 进行拼接将得到的数据进行IP逆置换即得到了所求的密文。

5.补充–密钥生成
1. 密钥生成过程

密钥的生成总的操作如下图所示:

  1. 取一个 64 位的种子密钥,然后通过以下置换表,即可得到 56 位的密钥:
  1. 然后将56位的密钥对半分为两部分C与D根据移位次数表进行循环左移操作。
    在这里插入图片描述
  2. 最后将移位完成的数据参照以下置换表进行置换,得到最终的 48 位密钥。
2. 密钥生成具体实例
  1. 原始种子密钥(64位)如下图所示

2.通过 PC-1 表置换后得到如下结果

  1. 通过对上面数据的对半截取可得到 C 0 C_0 C0 D 0 D_0 D0
  1. 根据移位次数表根据不同的迭代次数可以求得不同的 C i C_i Ci D i D_i Di
  1. C i C_i Ci D i D_i Di 进行拼接,然后通过 PC-2置换表即可得到不同迭代轮次的密钥 K i K_i Ki

相关推荐

  1. vue 项目中添加DES加密

    2024-03-16 06:08:04       54 阅读
  2. DES文件加密解密(增强版)

    2024-03-16 06:08:04       6 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-16 06:08:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-16 06:08:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-16 06:08:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-16 06:08:04       18 阅读

热门阅读

  1. mysql 查询字段大于某长度的SQL

    2024-03-16 06:08:04       19 阅读
  2. Lua 学习

    2024-03-16 06:08:04       20 阅读
  3. SpringBoot打造企业级进销存储系统 第四讲

    2024-03-16 06:08:04       24 阅读
  4. 关于I2C(Inter-Integrated Circuit)死锁及解决措施

    2024-03-16 06:08:04       19 阅读
  5. 金钱感知-

    2024-03-16 06:08:04       21 阅读
  6. 在Flutter中创建自定义的左对齐TabBar组件

    2024-03-16 06:08:04       19 阅读
  7. 【C#动态加载数据】“防界面卡死”

    2024-03-16 06:08:04       24 阅读
  8. 突破编程_C++_设计模式(中介者模式)

    2024-03-16 06:08:04       18 阅读