DES算法描述

DES算法是第一个公开的密钥算法,采用64比特数据块和56比特密钥,通过16轮迭代变换实现加密。每轮变换包括初始和逆初始置换、轮密钥生成、E盒扩展、S盒代替和P盒置换。3DES算法通过3次DES操作,使用3个不同密钥,提高了安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  DES算法是第一个公开的密钥算法,是一个迭代型的分组算法。分组长度646464比特,密钥长度为646464比特,其中有效位长为565656比特,每个第888位都用作奇偶校验,不参与密码计算,迭代次数为161616次,每轮的迭代密钥为484848比特。

基本流程

  DES算法的基本流程如下图所示:
DES算法流程

初始置换(IPIPIP)与逆初始变换(IP−1IP^{-1}IP1

  初始置换 IP

初始置换 IP
585042342618102
605244362820124
625446383022146
645648403224168
57494133251791
595143352719113
615345372921135
635547393123157

例:
M=1001001000111010100100101010010110101101000011101010111010010011⟶IPC=0000000010000111011110001001100011011101010110100111001011100111\begin{aligned} M = \begin{matrix} 10010010 \\ 00111010\\ 10010010\\10100101\\10101101\\00001110\\10101110\\10010011 \end{matrix}\stackrel{IP}{\longrightarrow} C = \begin{matrix} 00000000\\10 000111\\01111000\\10011000\\11011101\\01011010\\01110010\\11100111\end{matrix} \end{aligned}M=1001001000111010100100101010010110101101000011101010111010010011IPC=0000000010000111011110001001100011011101010110100111001011100111

  逆初始置换是初始置换的逆变换,用表格表示如下

逆初始置换
408481656246432
397471555236331
386461454226230
375451353216129
364441252206028
353431151195927
342421050185926
33141949175725

例:

C=0000000010000111011110001001100011011101010110100111001011100111⟶IP−1M=1001001000111010100100101010010110101101000011101010111010010011\begin{aligned} C = \begin{matrix} 00000000\\10 000111\\01111000\\10011000\\11011101\\01011010\\01110010\\11100111 \end{matrix} \stackrel{IP^{-1}}{\longrightarrow} M = \begin{matrix} 10010010 \\ 00111010\\ 10010010\\10100101\\10101101\\00001110\\10101110\\10010011 \end{matrix} \end{aligned}C=0000000010000111011110001001100011011101010110100111001011100111IP1M=1001001000111010100100101010010110101101000011101010111010010011

轮变换(RoundnRound_nRoundn

  使用的是Feistel模型,数学描述如下:
Li=Ri−1Ri=Li−1⊕f(Ri−1,Ki)\begin{aligned} L_{i} &= R_{i-1}\\ R_{i}&=L_{i-1}\oplus f(R_{i-1}, K_i) \end{aligned}LiRi=Ri1=Li1f(Ri1,Ki)
即,迭代过程中

  • 输出的左32比特(LiL_{i}Li),为上一轮输出的右32比特(Ri−1R_{i-1}Ri1)
  • 输出的右32比特(RiR_{i}Ri),为上一轮输出的右32比特(Ri−1R_{i-1}Ri1)与轮密钥(KiK_iKi)的fff函数再异或上一轮输出的左32比特(Li−1L_{i-1}Li1)。

fff函数

  其数学表达式为
f(R,K)=PS(E(R)⊕K)f(R,K) = PS(E(R)\oplus K)f(R,K)=PS(E(R)K)

  1. 先对右323232比特输入进行E盒运算,得到484848比特输出;
  2. 再把运算结果和484848比特的轮密钥进行异或,输入至S1,S2,...S8S_1, S_2,...S_8S1,S2,...S8盒中;
  3. 每个S盒都是666444出,综合得到4×8=324\times 8=324×8=32比特输出;
  4. 把结果输入至P盒中,进行P盒置换,最后得到323232位输出。
E盒扩展

  E盒扩展的作用,是将323232比特输入扩展成484848比特的输出。扩展方式为:

  1. 把输入的323232比特从左至右编码,并把其写成8×48 \times 48×4的形式.
  2. 然后把第i−1i-1i1行的最右比特和第i+1i+1i+1行的最左比特分别添加至第iii行的最左边和最右边。

这样一来,将323232比特的输入就扩展成484848比特的输出了。
E盒扩展示图
例:
M=00001000011110011101010101111110⟶EC=000001010000001111110011111010101010101111111100\begin{aligned} M = \begin{matrix} 0000\\10 00\\0111\\1001\\1101\\0101\\0111\\1110 \end{matrix} \stackrel{E}{\longrightarrow} C = \begin{matrix} 0&0000&1\\0&10 00&0\\0&0111&1\\1&1001&1\\1&1101&0\\1&0101&0\\1&0111&1\\1&1110&0 \end{matrix} \end{aligned}M=00001000011110011101010101111110EC=000111110000100001111001110101010111111010110010

S盒代替——压缩替代变换

  S盒作用是将输入的48比特压缩为32比特的输出。

  1. 484848比特输入,写成8×68 \times 68×6的形式;
  2. 将每行666比特,分别输入至S1,...S8S_1,...S_8S1,...S8盒中;
  3. 对每行的666比特的最高位和最低位组成的数字作为S盒的行数,中间444比特作为S盒的列数,输出对应的值。

888666444出的S盒对照表如下:
S盒对照表
例:
M=000001010000001111110011111010101010101111111100⟶EC=00001001101001000011100001110101\begin{aligned} M = \begin{matrix} 000001\\010 000\\001111\\110011\\111010\\101010\\101111\\111100 \end{matrix}\stackrel{E}{\longrightarrow} C = \begin{matrix} 0000\\10 01\\1010\\0100\\0011\\1000\\0111\\0101 \end{matrix} \end{aligned}M=000001010000001111110011111010101010101111111100EC=00001001101001000011100001110101

P盒置换——移位变换

  P盒置换是对S盒的输出进行比特置换。

P盒置换
1672021
29122817
1152326
5183110
282414
322739
1913306
2211425

例:
M=00001001101001000011100001110101⟶PC=00110010000110000101110110100100\begin{aligned} M = \begin{matrix} 0000\\10 01\\1010\\0100\\0011\\1000\\0111\\0101 \end{matrix} \stackrel{P}{\longrightarrow} C =\begin{matrix}0011\\ 0010\\ 0001 \\ 1000 \\01 0 1\\11 01 \\1010\\0100\end{matrix} \end{aligned}M=00001001101001000011100001110101PC=00110010000110000101110110100100

轮密钥生成

  轮密钥生成过程如下图所示:
轮密钥生成
  其生成过程如下:

  1. 646464比特的密钥经置换选择1得到565656比特的有效密钥;
  2. 565656比特的有效密钥,分成左282828比特(CiC_iCi)和右282828比特(DiD_iDi),经过循环左移分别得到下一轮的左282828比特(Ci+1C_{i+1}Ci+1)和右282828比特(Di+1D_{i+1}Di+1),其中得到C/D1C/D_1C/D1C/D2C/D_2C/D2C/D9C/D_9C/D9C/D16C/D_{16}C/D16前面的移位是循环左移222位,其余的为111位;
  3. 将每一轮移位后的Ci∣∣DiC_i||D_iCi∣∣Di作为置换选择2的输入,得到每轮的密钥KiK_iKi

置换选择1

  置换选择1的对照表如下:

置换选择1
5749413325179
1585042342618
1025951433527
1911360524436
63554739312315
7625446383022
1466153453729
211352820124

例:

K=0000010110011011101000110100110100111000100011000111100101011010⟶置换选择1C0∣∣D0=00100110110010000101010011011000011000101001111110100010\begin{aligned} K = \begin{matrix} 00000101\\10 011011\\10100011\\01001101\\00111000\\10001100\\01111001\\01011010 \end{matrix} \stackrel{置换选择1}{\longrightarrow} C_0 ||D_0 =\begin{matrix}0010011\\0110010\\0001010\\10 01101\\1000011 \\0001010\\0111111\\0100010 \end{matrix} \end{aligned}K=0000010110011011101000110100110100111000100011000111100101011010置换选择1C0∣∣D0=00100110110010000101010011011000011000101001111110100010

置换选择2

  置换选择2的对照表如下:

置换选择2
1417112415
3281562110
2319124268
1672720132
415231374755
304051453348
444939563453
464250362922

例:
C0∣∣D0C_0||D_0C0∣∣D0循环左移2位,再经过置换选择2得到K1K_1K1.

C0∣∣D0=00100110110010000101010011011000011000101001111110100010⟶循环左移2位C1∣∣D1=10011011001000010101001101100001100010100111111010001000⟶置换选择2K1=001111000000100111111100000110000110111001110000\begin{aligned} C_0 ||D_0 =\begin{matrix}0010011\\0110010\\0001010\\10 01101\\1000011 \\0001010\\0111111\\0100010 \end{matrix} \stackrel{循环左移2位}{\longrightarrow} C_1 ||D_1 =\begin{matrix}1001101\\1001000\\0101010\\ 0110110\\0001100 \\0101001\\1111101\\0001000 \end{matrix}\stackrel{置换选择2}{\longrightarrow} K_1 =\begin{matrix}001111\\ 000000\\100111\\111100 \\000110\\000110 \\111001\\ 110000\end{matrix} \end{aligned}C0∣∣D0=00100110110010000101010011011000011000101001111110100010循环左移2C1∣∣D1=10011011001000010101001101100001100010100111111010001000置换选择2K1=001111000000100111111100000110000110111001110000

3DES算法

  由于 DES 算法的密钥长度只有 565656 位,为了提高安全性,人们在 DES 的基础上提出了 3DES 算法。顾名思义,3DES 算法是 333 次 DES 算法。在加密过程中,分别利用 333 个不同的 565656 位密钥,依次做 “加密,解密,加密”。具体地说:

  1. 用密钥 1 对明文做 DES 加密运算,得到中间结果 1;
  2. 将中间结果 1 利用密钥 2 做一次解密运算,得到中间结果 2;
  3. 将中间结果 2 用密钥 3 做一次加密,得到最终结果。
      解密时,依次用密钥 3,密钥 2,密钥 1 做 “解密,加密,解密” 运算。3DES 算法在保证了对原有 DES 的兼容性的基础上,讲将密钥长度从 565656 为扩展到了 168168168位,增强了抗穷举攻击的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_74043383

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值