DES算法原理完整版

  • Post author:
  • Post category:其他



1.所需参数

key:8个字节共64位的工作密钥

data:8个字节共64位的需要被加密或被解密的数据

mode:DES工作方式,加密或者解密


2.初始置换

DES算法使用64位的密钥key将64位的明文输入块变为64位的密文输出块,并把输出块分为L0、R0两部分,每部分均为32位。初始置换规则如下:


注意:这里的数字表示的是原数据的位置,不是数据

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,


即将输入的64位明文的第1位置换到第40位,第2位置换到第8位,第3位置换到第48位。以此类推,最后一位是原来的第7位。置换规则是规定的。L0(Left)是置换后的数据的前32位,R0(Right)是置换后的数据的后32位。

例如:64位输入块是D1~D64,则经过初始置换后是D58,D50…D7。则L0=D58,D50,D12…D8;R0=D57,D49,D41…D7。

该置换过程是在64位秘钥的控制下。


3.加密处理–迭代过程

经过初始置换后,进行16轮完全相同的运算,在运算过程中数据与秘钥结合。

函数f的输出经过一个异或运算,和左半部分结合形成新的右半部分,原来的右半部分成为新的左半部分。

每轮迭代的过程可以表示如下:

Ln = R(n – 1);

Rn = L(n – 1)⊕f(Rn-1,kn-1)

⊕:异或运算

Kn是向第N层输入的48位的秘钥,f是以Rn-1和Kn为变量的输出32位的函数


3.1函数f


函数f由四步运算构成:秘钥置换(Kn的生成,n=0~16);扩展置换;S-盒代替;P-盒置换。


3.1.1 秘钥置换–子密钥生成

DES算法由64位秘钥产生16轮的48位子秘钥。在每一轮的迭代过程中,使用不同的子秘钥。

a、把密钥的奇偶校验位忽略不参与计算,即每个字节的第8位,将64位密钥降至56位,然后根据选择置换PC-1将这56位分成两块C0(28位)和D0(28位);

b、将C0和D0进行循环左移变化(注:每轮循环左移的位数由轮数决定),变换后生成C1和D1,然后C1和D1合并,并通过选择置换PC-2生成子密钥K1(48位);

c、C1和D1在次经过循环左移变换,生成C2和D2,然后C2和D2合并,通过选择置换PC-2生成密钥K2(48位);

d、以此类推,得到K16(48位)。但是最后一轮的左右两部分不交换,而是直接合并在一起R16L16,作为逆置换的输入块。其中循环左移的位数一共是循环左移16次,



版权声明:本文为qq_27570955原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。