DES加密算法详解——看这一篇就够了!

本文详细介绍了DES加密算法,包括其简介、算法参数和加密步骤。重点解析了IP置换、密钥K控制的16轮运算,特别是子密钥计算过程,以及轮运算中的扩展置换、S盒转换等关键步骤,帮助读者全面掌握DES算法。

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

目录

一、DES简介

二、DES算法入参

三、DES加密算法步骤解析

1. IP置换(M -> M0)

2. 密钥K控制的16轮运算(M0,K1~K16 -> M16)

2.1. 子密钥Kn的计算

——2.1.1 PC-1置换

——2.1.2 循环左移运算

——2.1.3 PC-2置换

2.2. 轮运算

——2.2.1 扩展置换E

——2.2.2 异或Kn

——2.2.3 S盒转换

——2.2.4 P盒置换

——2.2.5 异或运算

——2.2.6 2-16轮运算

3. 交换左右32位(M16 -> M16')

4. IP-1逆置换(M16' -> M')


一、DES简介

DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。加密和解密使用相同的密钥。 

明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1),分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。

二、DES算法入参

  1. data:要加密数据/被解密的数据,8字节64位。不足64位补足64位。
  2. key:密钥,64位中56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)。
  3. mode:加密 or 解密。

三、DES加密算法步骤解析

加密步骤:

  • 64位明文M
  • —— 1.(IP置换)
  • —— 2.(密钥K控制的16轮迭代运算)
  • —— 3.(交换左右32位)
  • —— 4.(IP-1逆置换)
  • 64位密文M'

其中56位密钥K会被处理,最终输出16个48位子密钥参与到16轮迭代运算中。

// 明文M(16进制和2进制)64位
M = 0123456789ABCDEF
M = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

// 密钥K(16进制和2进制)64位
K = 133457799BBCDFF1
K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001

// 去除校验位的密钥      56位
K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001

1. IP置换(M -> M0)

描述:64位明文M,经过IP置换获得M0。

IP置换表如下所示:

IP置换表
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7

这里的 IP 置换是将 64 bit 明文 M 的位重新排序,得到新的数据 M0。例如将 M 的 58 位放在第 1 位,将 M 的 50 位放在第 2 位,以此类推,M 的第 7 位 放到第 64 位 ,得到置换后的 M0。

M  = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
M0 = IP(M) 
   = 1100 1100 0000 0000 1100 1100 1111 1111 1111 0000 1010 1010 1111 0000 1010 1010

2. 密钥K控制的16轮运算(M0,K1~K16 -> M16)

描述:轮运算的输入为M0、K1-K16;输出为M16。

  • 第1轮运算,输入M0、K1,得到M1。
  • 第2轮运算,输入M1、K2,得到M2。
  • 第16轮运算,输入M15、K16,最终得到M16。

可以分为两步进行,先根据K计算子密钥K1~K16,再根据M0以及K1~K16,计算16轮运算结果M16。

2.1. 子密钥Kn的计算

描述:先将64位密钥去除8个奇偶校验位,得到实际使用的56位密钥K(56bit),再经过运算得到子密钥K1~K16(48bit)。

  1. 首先对K(56bit)进行PC-1置换,得到新K(56bit)。
  2. K(56bit)分为左右28bit C0和D0,分别进行循环左移运算得到C1和D1;之后将数据C1 D1合并,再进行PC-2置换,得到K1。
  3. 在C1和D1的基础上进行第二次循环左移运算,之后将数据合并,再进行PC-2置换,得到K2。
  4. 以此类推,得到 K16。

①:PC-1置换,内容详见2.1.1

②:循环左移表R(n),内容详见2.1.2

③:PC-2置换,内容详见2.1.3

——2.1.1 PC-1置换

PC-1置换表如下所示:

PC-1
57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4

PC-1置换也是位置换,将原K的57位放在第一位,将K的第4位放在最后一位。

密钥 64位
      K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001

56位原密钥(去除校验位)
      K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001

新密钥 
PC-1(K) = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111

将新密钥分为左右两组
     C0 = 1111000 0110011 0010101 0101111 
     D0 = 0101010 1011001 1001111 0001111

——2.1.2 循环左移运算

循环左移表R(n)如下所示,n表示第几次循环左移,循环左移是会将左移后的数字补在末尾。

循环左移表
轮数 n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
位数 R(n) 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1

可以看出第一轮循环左移1位(补在末尾),即C1=C0<<1,第二轮C2=C1<<1,以此类推

          C0 = 1111000011001100101010101111
  C1 = C0<<1 =  1110000110011001010101011111
  C2 = C1<<1 =   1100001100110010101010111111
  C3 = C2<<2 =     0000110011001010101011111111

得到 C0-C16,D0-D16

 C0 = 1111000011001100101010101111
 D0 = 0101010101100110011110001111
 C1 = 1110000110011001010101011111
 D1 = 1010101011001100111100011110
 C2 = 1100001100110010101010111111
 D2 = 0101010110011001111000111101
 C3 = 0000110011001010101011111111
 D3 = 0101011001100111100011110101
 C4 = 0011001100101010101111111100
 D4 = 0101100110011110001111010101
 C5 = 1100110010101010111111110000
 D5 = 0110011001111000111101010101
 C6 = 0011001010101011111111000011
 D6 = 1001100111100011110101010101
 C7 = 1100101010101111111100001100
 D7 = 0110011110001111010101010110
 C8 = 0010101010111111110000110011
 D8 = 1001111000111101010101011001
 C9 = 0101010101111111100001100110
 D9 = 0011110001111010101010110011
C10 = 0101010111111110000110011001
D10 = 1111000111101010101011001100
C11 = 0101011111111000011001100101
D11 = 1100011110101010101100110011
C12 = 0101111111100001100110010101
D12 = 0001111010101010110011001111
C13 = 0111111110000110011001010101
D13 = 0111101010101011001100111100
C14 = 1111111000011001100101010101
D14 = 1110101010101100110011110001
C15 = 1111100001100110010101010111
D15 = 1010101010110011001111000111
C16 = 1111000011001100101010101111
D16 = 0101010101100110011110001111

——2.1.3 PC-2置换

PC-2置换表如下所示:

PC-2
14 17
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Nameless-Y

文章帮助到我了!

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

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

打赏作者

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

抵扣说明:

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

余额充值