1. 什么是 DES
DES(Data Encryption Standard)是一种对称加密算法。它是在 20 世纪 70 年代初期由 IBM 研发的。它的设计目标是提供高度的数据安全性和性能,并且能够在各种硬件和软件平台上实现。
2. DES 的基本概念
DES 使用 56 位的密钥和 64 位的明文块进行加密。DES 算法的分组大小是 64 位,因此,如果需要加密的明文长度不足 64 位,需要进行填充;如果明文长度超过 64 位,则需要使用分组模式进行分组加密。
虽然 DES 算法的分组大小是 64 位,但是由于 DES 算法的密钥长度只有 56 位,因此 DES 算法存在着弱点,容易受到暴力破解和差分攻击等攻击手段的威胁。因此,在实际应用中,DES 算法已经不再被广泛使用,而被更加安全的算法所取代,如 AES 算法等。
尽管 DES 已经被取代,但它在密码学的历史上仍然具有重要意义。通过 DES 可以帮助我们了解对称密钥加密算法的基本概念和运作原理。
3. DES 的加密流程
当输入了一条 64 位的数据之后,DES 将通过以下步骤进行加密。

- 初始置换(IP 置换):将输入的 64 位明文块进行置换和重新排列,生成新的 64 位数据块。
- 加密轮次:DES 加密算法共有 16 个轮次,每个轮次都包括四个步骤:
- 将 64 位数据块分为左右两个 32 位块。
- 右侧 32 位块作为输入,经过扩展、异或、置换等操作生成一个 48 位的数据块。这个 48 位的数据块被称为'轮密钥',它是根据加密算法的主密钥生成的子密钥。
- 将左侧 32 位块和轮密钥进行异或运算,结果作为新的右侧 32 位块。
- 将右侧 32 位块与原来的左侧 32 位块进行连接,生成一个新的 64 位数据块,作为下一轮的输入。
- 末置换(FP 置换):在最后一个轮次完成后,将经过加密的数据块进行置换和重新排列,得到加密后的 64 位密文。
总的来说,DES 加密的过程就是通过一系列置换、异或、扩展等运算,将明文分成若干个小块,然后根据主密钥生成一系列的轮密钥,利用轮密钥对每个小块进行加密,最终将加密结果重新组合成一个整体,得到密文。
4. DES 算法步骤详解
4.1 初始置换 (Initial Permutation, IP 置换)
IP 置换是将输入的 64 位明文块进行置换和重新排列,生成新的 64 位数据块。
目的: 增加加密的混乱程度,使明文中的每一位都能够对后面的加密过程产生影响,提高加密强度。
我们将把 64 位的顺序按下表中规定的顺序放置,图中的数字是在 64 位明文中每个比特的索引位置。注意,在 DES 中,这个置放规则是固定的。

即将原来位于第 58 个位置的数据放在第 1 个位置,原来位于第 50 个位置的元素放在第 2 个位置,第 42 个放在第 3 个,34->4 以此类推…
初始置换的逆置换(Final Permutation, FP 置换)是将加密后的数据块进行置换和重新排列,得到最终的加密结果,与初始置换相对应。
4.2 加密轮次
初始置换完成后,明文被划分成了相同长度(32 位)的左右两部分,记作 L0,R0。接下来就会进行 16 个轮次的加密了。
我们从单独一个轮次来看。首先把目光聚焦在 R0 这里。













