您当前的位置:首页 > 计算机论文>计算机应用论文

DES算法实现过程分析

2015-07-09 10:59 来源:学术参考网 作者:未知
1.  处理密钥:
1.1 从用户处获得64位密钥.(每第8位为校验位,为使密钥有正确的奇偶校验,每个密钥要有奇数个”1”位.(本文如未特指,均指二进制位)
1.2  具体过程:
1.2.1  对密钥实施变换,使得变换以后的密钥的各个位与原密钥位对应关系如下表所示:
表一为忽略校验位以后情况
12   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28
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
29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56
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
1.2.2 把变换后的密钥等分成两部分,前28位记为C[0], 后28位记为D[0].
1.2.3 计算子密钥(共16个), 从i=1开始。
1.2.3.1 分别对C[i-1],D[i-1]作循环左移来生成C[i],D[i].(共16次)。每次循环左移位数
如下表所示:
循环次数  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16
左移位数  1  1  2  2  2  2  2  2  1   2   2   2   2   2   2   1
1.2.3.2 串联C[i],D[i],得到一个56位数,然后对此数作如下变换以产生48位子密钥K[i]。
变换过程
12   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24
14  17  11  24   1   5   3  28  15   6  21  10  23  19  12   4  26   8  16   7  27  20  13   2
25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48
41  52  31  37  47  55  30  40  51  45  33  48  44  49  39  56  34  53  46  42  50  36  29  32
1.2.3.3  按以上方法计算出16个子密钥。
2.对64位数据块的处理:
2.1 把数据分成64位的数据块,不够64位的以适当的方式填补。
2.2对数据块作变换。
bit  goes to bit  bit  goes to bit
581 57   33
502 49   34
423 41   35
344 33   36
265 25   37
186 17   38
107 9   39
2 8 1   40
609 59   41
52   10 51   42
44   11 43   43
36   12 35   44
28   13 27   45
20   14 19   46
12   15 11   47
416 3   48
62   17 61   49
54   18 53   50
46   19 45   51
38   20 37   52
30   21 29   53
22   22 21   54
14   23 13   55
624 5   56
64   25 63   57
56   26 55   58
48   27 47   59
40   28 39   60

32   29 31   61
24   30 23   62
16   31 15   63
832 7   64
2.3 将变换后的数据块等分成前后两部分,前32位记为L[0],后32位记为R[0]。
2.4 用16个子密钥对数据加密。
2.4.1 根据下面的扩冲函数E,扩展32位的成48位
bit  goes to bit  bit  goes to bit  bit  goes to bit  bit  goes to bit
321 8   13 16   25 24   37
1 2 9   14 17   26 25   38
2 3 10   15 18   27 26   39
3 4 11   16 19   28 27   40
4 5 12   17 20   29 28   41
5 6 13   18 21   30 29   42
4 7 12   19 20   31 28   43
5 8 13   20 21   32 29   44
6 9 14   21 22   33 30   45
710 15   22 23   34 31   46
811 16   23 24   35 32   47
912 17   24 25   36 1   48
2.4.2 用E{R[i-1]}与K[i]作异或运算。
2.4.3 把所得的48位数分成8个6位数。1-6位为B[1],7-12位为B,……43-48位为B。
2.4.4 用S密箱里的值替换B[j]。从j=1开始。S密箱里的值为4位数,共8个S密箱
2.4.4.1 取出B[j]的第1和第6位串联起来成一个2位数,记为m.。m即是S密箱里用来替换
   B[j]的数所在的列数。
2.4.4.2 取出B[j]的第2至第5位串联起来成一个4位数,记为n。n即是S密箱里用来替换
   B[j]的数所在的行数。
2.4.4.3 用S密箱里的值S[j][ m][ n]替换B[j]。8个S密箱如下所示:
--------
S-BOXES1
Binary  d1d6 =>  00  01  10  11
“/ d2..d5 “/  Dec 0   1   2   3
0000 0 14   0   4  15
0001 1  4  15   1  12
0010 2 13   7  14   8
0011 3  1   4   8   2
0100 4  2  14  13   4
0101 5 15   2   6   9
0110 6 11  13   2   1
0111 7  8   1  11   7
1000 8  3  10  15   5
1001 9 10   6  12  11
101010  6  12   9   3
101111 12  11   7  14
110012  5   9   3  10
110113  9   5  10   0
111014  0   3   5   6
111115  7   8   0  13
--------
S-BOXES2
binary  d1d6 =>  00  01  10  11
“/ d2..d5 “/  dec 0   1   2   3
0000 0 15   3   0  13
0001 1  1  13  14   8
0010 2  8   4   7  10
0011 3 14   7  11   1
0100 4  6  15  10   3
0101 5 11   2   4  15
0110 6  3   8  13   4
0111 7  4  14   1   2
1000 8  9  12   5  11
1001 9  7   0   8   6
101010  2   1  12   7

101111 13  10   6  12
110012 12   6   9   0
110113  0   9   3   5
111014  5  11   2  14
111115 10   5  15   9
--------
S-BOXES3
binary  d1d6 =>  00  01  10  11
“/ d2..d5 “/  dec 0   1   2   3
0000 0 10  13  13   1
0001 1  0   7   6  10
0010 2  9   0   4  13
0011 3 14   9   9   0
0100 4  6   3   8   6
0101 5  3   4  15   9
0110 6 15   6   3   8
0111 7  5  10   0   7
1000 8  1   2  11   4
1001 9 13   8   1  15
101010 12   5   2  14
101111  7  14  12   3
110012 11  12   5  11
110113  4  11  10   5
111014  2  15  14   2
111115  8   1   7  12
--------
S-BOXES4
binary  d1d6 =>  00  01  10  11
“/ d2..d5 “/  dec 0   1   2   3
0000 0  7  13  10   3
0001 1 13   8   6  15
0010 2 14  11   9   0
0011 3  3   5   0   6
0100 4  0   6  12  10
0101 5  6  15  11   1
0110 6  9   0   7  13
0111 7 10   3  13   8
1000 8  1   4  15   9
1001 9  2   7   1   4
101010  8   2   3   5
101111  5  12  14  11
110012 11   1   5  12
110113 12  10   2   7
111014  4  14   8   2
111115 15   9   4  14
--------
S-BOXES5
binary  d1d6 =>  00  01  10  11
“/ d2..d5 “/  dec 0   1   2   3
0000 0  2  14   4  11
0001 1 12  11   2   8
0010 2  4   2   1  12
0011 3  1  12  11   7
0100 4  7   4  10   1
0101 5 10   7  13  14
0110 6 11  13   7   2
0111 7  6   1   8  13
1000 8  8   5  15   6
1001 9  5   0   9  15
101010  3  15  12   0
101111 15  10   5   9
110012 13   3   6  10
110113  0   9   3   4
111014 14   8   0   5
111115  9   6  14   3
--------
S-BOXES6
binary  d1d6 =>  00  01  10  11
“/ d2..d5 “/  dec 0   1   2   3
0000 0 12  10   9   4
0001 1  1  15  14   3
0010 2 10   4  15   2
0011 3 15   2   5  12
0100 4  9   7   2   9
0101 5  2  12   8   5
0110 6  6   9  12  15
0111 7  8   5   3  10
1000 8  0   6   7  11
1001 9 13   1   0  14
101010  3  13   4   1

101111  4  14  10   7
110012 14   0   1   6
110113  7  11  13   0
111014  5   3  11   8
111115 11   8   6  13
--------
S-BOXES7
binary  d1d6 =>  00  01  10  11
“/ d2..d5 “/  dec  0  1   2   3
0000 0  4  13   1   6
0001 1 11   0   4  11
0010 2  2  11  11  13
0011 3 14   7  13   8
0100 4 15   4  12   1
0101 5  0   9   3   4
0110 6  8   1   7  10
0111 7 13  10  14   7
1000 8  3  14  10   9
1001 9 12   3  15   5
101010  9   5   6   0
101111  7  12   8  15
110012  5   2   0  14
110113 10  15   5   2
111014  6   8   9   3
111115  1   6   2  12
--------
S-BOXES8
binary  d1d6 =>  00  01  10  11
“/ d2..d5 “/  dec 0   1   2   3
0000 0 13   1   7   2
0001 1  2  15  11   1
0010 2  8  13   4  14
0011 3  4   8   1   7
0100 4  6  10   9   4
0101 5 15   3  12  10
0110 6 11   7  14   8
0111 7  1   4   2  13
1000 8 10  12   0  15
1001 9  9   5   6  12
101010  3   6  10   9
101111 14  11  13   0
110012  5   0  15   3
110113  0  14   3   5
111014 12   9   5   6
111115  7   2   8  11
2.4.4.4 返回2.4.4.1直至8个数据块都被替换。
2.4.5 把B[1]至B 顺序串联起来得到一个32位数。对这个数做如下变换:
bit  goes to bit  bit  goes to bit
16   1 2   17
72 8   18
20   3 24   19
21   4 14   20
29   5 32   21
12   6 27   22
28   7 3   23
17   8 9   24
19 19   25
15  10 13   26
23  11 30   27
26  12 6   28
5   13 22   29
18  14 11   30
31  15 4   31
10  16 25   32
2.4.6 把得到的结果与L[i-1]作异或运算。把计算结果赋给R[i]。
2.4.7 把R[i-1]的值赋给L[i]。
2.4.8 从2.4.1循环执行,直到K[16]也被用到。
2.5 把R[16]和L[16] 顺序串联起来得到一个64位数。对这个数实施2.2变换的逆变换。
  以上就是DES算法如何加密一段64位数据块。解密时用同样的过程,只需把16个子密钥的
顺续颠倒过来,应用的顺序为K[16],K[15],K[14]。。。。K[1]。


相关文章
学术参考网 · 手机版
https://m.lw881.com/
首页