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

2023-11-19

目录

一、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 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32

这步,根据 Cn和 Dn 获取 Kn(K1-K16),第n轮的新秘钥Kn 的第1位来自组合子秘钥CnDn的第14位,第2位来自第17位,依次类推,新秘钥的第48位来自组合秘钥的第32位。

C1D1 = 1110000 1100110 0101010 1011111 1010101 0110011 0011110 0011110

K1   = PC-2(C1D1)
     = 000110 110000 001011 101111 111111 000111 000001 110010

依次计算

K2   = 011110 011010 111011 011001 110110 111100 100111 100101
K3   = 010101 011111 110010 001010 010000 101100 111110 011001
K4   = 011100 101010 110111 010110 110110 110011 010100 011101
K5   = 011111 001110 110000 000111 111010 110101 001110 101000
K6   = 011000 111010 010100 111110 010100 000111 101100 101111
K7   = 111011 001000 010010 110111 111101 100001 100010 111100
K8   = 111101 111000 101000 111010 110000 010011 101111 111011
K9   = 111000 001101 101111 101011 111011 011110 011110 000001
K10  = 101100 011111 001101 000111 101110 100100 011001 001111
K11  = 001000 010101 111111 010011 110111 101101 001110 000110
K12  = 011101 010111 000111 110101 100101 000110 011111 101001
K13  = 100101 111100 010111 010001 111110 101011 101001 000001
K14  = 010111 110100 001110 110111 111100 101110 011100 111010
K15  = 101111 111001 000110 001101 001111 010011 111100 001010
K16  = 110010 110011 110110 001011 000011 100001 011111 110101

2.2. 轮运算

根据M0(L0R0)以及K1~K16,计算16轮运算结果M16(L16R16)。

64bit M0 拆为左右32bit,分别写作L0和R0。第1轮运算如下所示,第2-16轮运算带入上一轮运算结果。

第n轮运算结果为:Mn = LnRn

所以可得计算公式:

将经过IP置换的明文分为左右两组
M0 = IP(M) 
   = 1100 1100 0000 0000 1100 1100 1111 1111 1111 0000 1010 1010 1111 0000 1010 1010

L0 = 1100 1100 0000 0000 1100 1100 1111 1111 
R0 = 1111 0000 1010 1010 1111 0000 1010 1010

——2.2.1 扩展置换E

扩展置换E如下所示:

32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1

 这样,R0`= E(R0),  Rn`=E(Rn-1)

     R0`= E(R0) = 011110 100001 010101 010101 011110 100001 010101 010101 

——2.2.2 异或Kn

48bit数据 异或 48bit子密钥,  Rn`` = Kn 异或 E(Rn-1)

             K1 = 000110 110000 001011 101111 111111 000111 000001 110010 
R0`` = K1+E(R0) = 011000 010001 011110 111010 100001 100110 010100 100111

——2.2.3 S盒转换

对上述结果进行S盒转换(48bit -->  32bit),  Rn``` =  S(  Rn``  )  =  S(  Kn 异或 E(Rn-1)  )

R0``` = S(R0``) = S( K1+E(R0) ) 

将 R0`` 分为8个6bit的块,分别进行S盒转换(共有8个S盒)

R0``` = S(011000 010001 011110 111010 100001 100110 010100 100111)
      = S(B1     B2     B3     B4     B5     B6     B7     B8    )
      = S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8)


R0```  = S(R0``)
       = S1(B1-0)S2(B2-0)S3(B3-0)S4(B4-0)S5(B5-0)S6(B6-0)S7(B7-0)S8(B8-0)  

R1```  = S(R1``)
       = S1(B1-1)S2(B2-1)S3(B3-1)S4(B4-1)S5(B5-1)S6(B6-1)S7(B7-1)S8(B8-1)
...

R15``` = S(R15``) 
       = S1(B1-15)S2(B2-15)S3(B3-15)S4(B4-15)S5(B5-15)S6(B6-15)S7(B7-15)S8(B8-15)


其中 B1-0、B1-15 中的0和16表示 1-16 轮,0表示第1轮,15表示第16轮

B1-0, 第 1轮  R0`` 拆开的6bit
B1-16,第16轮 R15`` 拆开的6bit

S盒如下所示:48bit 转 32bit

如果S1是定义在这张表上的函数,B是一个6位的块,那么计算S1(B) 的方法是:B的第一位和最后一位组合起来的二进制数决定一个介于0和3之间的十进制数(或者二进制00到11之间)。设这个数为i。B的中间4位二进制数代表一个介于0到15之间的十进制数(二进制0000到1111)。设这个数为j。查表找到第i行第j列的那个数,这是一个介于0和15之间的数,并且它是能由一个唯一的4位区块表示的。这个区块就是函数S1 输入B得到的输出S1(B)。比如,对输入B = 011011 ,第一位是0,最后一位是1,决定了行号是01,也就是十进制的1 。中间4位是1101,也就是十进制的13,所以列号是13。查表第1行第13列我们得到数字5。这决定了输出;5是二进制0101,所以输出就是0101。也即S1(011011) = 0101。

同理,定义这8个函数S1,…,S8的表格如下所示:

S1
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
S2
15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
S3
10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
S4
7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
S5
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
S6
12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
S7
4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
S8
13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11

所以第一轮的S和输出就是

将 R0`` 分为8个6bit的块,分别进行S盒转换(共有8个S盒)

R0``` = S(R0``)
      = S(011000 010001 011110 111010 100001 100110 010100 100111)
      = S(B1     B2     B3     B4     B5     B6     B7     B8    )
      = S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8)


第一轮中:

R0```  = S(R0``)
       = S1(B1-0)S2(B2-0)S3(B3-0)S4(B4-0)S5(B5-0)S6(B6-0)S7(B7-0)S8(B8-0)  
       = 0101 1100 1000 0010 1011 0101 1001 0111

——2.2.4 P盒置换

P盒如下所示,置换后产生 32bit 输出:Rn```` = P( Rn``` )

P   
16 7 20 21
29 12 28 17
1 15 23 26
5 18 31 10
2 8 24 14
32 27 3 9
19 13 30 6
22 11 4 25

第一轮中:

R0```  = S(R0``)
       = S1(B1-0)S2(B2-0)S3(B3-0)S4(B4-0)S5(B5-0)S6(B6-0)S7(B7-0)S8(B8-0)  

R0```  = 0101 1100 1000 0010 1011 0101 1001 0111

R0```` = P(R0```) 
       = 1110 1111 0100 1010 0110 0101 0100 0100 

——2.2.5 异或运算

R1 = R0```` 异或 L0, Rn= (Rn-1```` 异或 Ln-1)

L0     = 1100 1100 0000 0000 1100 1100 1111 1111 
R0```` = 0010 0011 0100 1010 1010 1001 1011 1011 


   R1 = L0 异或 R0````
      = 1100 1100 0000 0000 1100 1100 1111 1111 
(异或)+ 0010 0011 0100 1010 1010 1001 1011 1011 
      = 1110 1111 0100 1010 0110 0101 0100 0100


即 R1 = 1110 1111 0100 1010 0110 0101 0100 0100

L1=R0, Ln = Rn-1

L1 = R0 
   = 1111 0000 1010 1010 1111 0000 1010 1010

——2.2.6 2-16轮运算

直到2.2.6,才进行完第一次轮运算,按照公式

Ln = Rn-1 ;Rn= (Rn-1```` 异或 Ln-1);

 L2 = R1,R2 = L1 异或 P(S(E(R1)异或K2))。

可以依次计算,得到 L16 R16,即 M16:

L16 = 0100 0011 0100 0010 0011 0010 0011 0100 
R16 = 0000 1010 0100 1100 1101 1001 1001 0101

M16  = L16R16

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

描述:将16轮运算结果 M16 进行左右32bit交换。

(L16)(R16) -> (R16)(L16)

L16 = 0100 0011 0100 0010 0011 0010 0011 0100 
R16 = 0000 1010 0100 1100 1101 1001 1001 0101

M16  = L16R16
M16` = R16L16 = 00001010 01001100 11011001 10010101 01000011 01000010 00110010 00110100

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

描述:将M16'进行IP-1逆置换,得到最终加密数据M',M'也是64bit。

IP-1表如下所示:

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

IP-1 置换同理,将 M16` 的第40位作为第1位,将 M16` 的第25位作为最后一位。 

M' = IP-1 (M16') 

M16` = R16L16 = 00001010 01001100 11011001 10010101 01000011 01000010 00110010 00110100

  M' = IP-1 (M16')
     = 10000101 11101000 00010011 01010100 00001111 00001010 10110100 00000101
 
  再转换为16进制:
  M' = 85E813540F0AB405

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DES加密算法详解——看这一篇就够了! 的相关文章

  • MATLAB算法实战应用案例精讲-【时序模型】循环神经网络-GRU(附MATLAB和Python代码)

    目录 前言 几个高频面试题 1 GRU与LSTM的区别与联系 2 LSTM和RNN的区别 GRU的引入 算法原理
  • 61.(前端)权限管理实现——从数据库中获取数据展示在前端,使用插槽和Tag标签美化数据展示

    1 概述 本次内容 主要是对用户权限列表进行展示 2 基本流程 在component文件夹下创建power文件夹 并在power文件夹下创建Menu vue 在Menu vue任意编写显示内容 用于测试 去router index js挂载
  • ERC20 协议

    https www jb51 net blockchain 797814 html https blog csdn net bareape article details 124275062 代币标准 ERC20协议源码解析 我们在买入US
  • Jenkins以root用户运行

    Jenkins安装完成后默认会创建一个jenkins的用户 并以jenkins用户运行 在我们通过jenkins编写一些命令的时候容易出现权限不足的提示 permision denied 通过为jenkins工作区赋予777的权限以后 也可
  • IPv6地址结构、地址分类以及表示方法

    IPv6地址的表示方法 IPv6地址总长度为128比特 通常分为8组 每组为4个十六进制数的形式 每组十六进制数间用冒号分隔 例如 FC00 0000 130F 0000 0000 09C0 876A 130B 这是IPv6地址的首选格式
  • 基于SpringBoot的高校党务管理系统

    系列文章目录 基于PHP的旅游管理系统 基于SSM的毕业设计管理系统 基于SpringBoot的高校在线答疑管理系统 目录 系列文章目录 一 相关技术 二 系统功能 三 系统页面 1 管理员功能页面 2 学生功能页面 3 党组织功能页面 4
  • IDEA2021中VUE代码爆红解决方案

    1 在IDEA中安装vue js插件 找到vue js安装即可 之后点击apply gt OK 2 安装完成后打开cmd 输入npm v npm命令集成在node js里面 如果这条命令失败则前往node js进行相关的安装 3 爆红的主要
  • ES索引库的别名的使用--不停服实现索引库的重建切换

    ES 的别名不停停服切换索引 线上发布 场景 我们现在线上正在使用 ES索引库 V 没有使用ES索引库别名 两个问题 现在由于字段更新 把线上的数据重新写入了V1库 现在如何在不断服的情况下 完美的实现 从V 切换到V1 索引库 后续如果再
  • 劳务派遣员工转正制度是什么

    一 劳务派遣员工转正制度是什么 要根据不同的单位来看 因为具体的制度还是要看用工单位的相关规定 比如大部分银行每年都会有一定的转正名额 公务员和事业单位的转正机会则较少 想要成为正式员工还是要参加招聘考试 银行招聘的时候会以劳务派遣的方式招
  • 【C++】_5.模板

    目录 1 泛型编程 2 函数模板 2 1 概念 2 2 函数模板格式 2 3 函数模板原理 2 4 函数模板的实例化 2 5 函数模板的匹配原则 3 类模板 4 非类型模板参数 5 模板的特化 5 1 概念 5 2 函数模板特化 5 3 类
  • Maven进阶-配置仓库

    1 1maven介绍 Maven是一个项目管理和综合工具 Maven提供了开发人员构建一个完整的生命周期框架 开发团队可以自动完成项目的基础工具建设 Maven使用标准的目录结构和默认构建生命周期 主要服务于基于Java平台的项目构建 依赖
  • java项目抠图功能实现

    java项目抠图功能 项目中需要一个上传文字签名并且抠掉背景图的功能 当初第一次听到这个需求时 差点惊掉下巴 我压根都不会觉得java里能实现这功能 但是既然客户需要 那就照办吧 经过这次功能的实现 我也更加坚定了一个想法 再奇葩的需求 也
  • 在idea中安装并且使用easy code插件 ,以及在idea中配置mysql数据库

    在idea中安装并且使用easy code插件 以及在idea中配置mysql数据库 1 从导航栏进入设置页面 2 点击plugins选项 在输入框中输入easy code查找 并点击installed安装 下载安装好了以后需要重启软件 点
  • Deque接口简介说明

    转自 Deque接口简介说明 下文笔者讲述Deque接口的简介说明 如下所示 Deque简介 Deque接口是一个双端队列 可以对队列的头尾进行操作 所以也可以当做栈来使用 Queue和Deque接口的相对应方法 Queue方法 Deque
  • 【Unity步步升】监控与检测物体的各种方案,如:射线、碰撞、挂载等...

    在制作AR模型数值控制方案的时候遇到了检测的问题 学习过程受益匪浅 故今天为大家整理带来一篇监控与检测物体的参考方案集合 目录 一 射线检测 二 物体存在检测 三 碰撞检测 一 射线检测 单射线检测 首先完成搭建场景如下图1 1 我这里用到
  • 面对内卷严重的2023年,测试人员该怎样修炼?

    这几天马上就要双12大促 相信大家都准备花了不少钱吧 其实在每一次大促的背后各大电商平台还在遭受一次又一次的的黑产攻击 拿阿里巴巴去年双十一举例 2684 亿交易额的背后 有一天内 22 亿次的黑产攻击 近几年网络安全事件层出不穷 相信大家
  • 【已解决】vs2015下QtnetWork No Such File or Directory报错

    源于笔者在做qt工具时 遇到的一个问题 问题很直观 加载第三方文件时 第三方文件调用了 include
  • d3dcompiler_43.dll丢失怎么修复?怎么解决

    在计算机使用过程中 我们经常会遇到一些错误提示 其中之一就是 找不到d3dcompiler 43 dll文件 那么 d3dcompiler 43 dll是什么文件 它的作用是什么 如果缺失了该如何修复呢 本文将详细介绍d3dcompiler
  • 为什么在 for 循环中检查 HashMap 是否具有特定值需要很长时间才能执行?

    我正在研究 Double DES 上的中间相遇攻击 我已经实现了 DES 加密 解密并完成了加密 现在我想对 Double DES 执行 MITM 攻击以找到密钥 我尝试实现此目的的方法是在 for 循环中将中间密码存储为 HashMap
  • 函数调用后,参数指针不会保留其值[重复]

    这个问题在这里已经有答案了 我将 3 个指针 key K1Ptr K2Ptr 作为参数传递给函数 keyGenerator 但是当函数调用结束时 只有 key 指针保留函数调用中的值 而其他 2 个指针则不保留 我尝试了很多不同的事情 比如

随机推荐

  • 虚幻引擎程序化资源生成框架PCG 之 UPCGBlueprintElement源码笔记(一)

    UPCGBlueprintElement是PCGGraph中自定义节点的基类 但官方目前还没有给出详细的文档 所以从源代码里找点答案 文章目录 可覆盖函数 Override Functions Excute 和 Excute with Co
  • web.xml加载顺序

    web xml加载顺序 应用服务器启动时web xml加载过程 至于这些节点在xml文件中的前后顺序没有关系 不过有些应用服务器 我曾碰到过的 websphere就严格要求web xml的节点顺序 否则部署不成功 所以还是赞成按照web x
  • CSS 样式穿透

    1 穿透语法 如果给样式中声明scop 那么页面的类会增加data 562e3wue8等属性 此时就需要用到 gt gt gt 或者 deep 或者 v deep 以后用后两个比较多 如果在样式类前面 v deep 则会自动找到 data
  • 快速搭建一个自己的服务器详解(java环境)

    一 服务器的购买 1 我选择的是阿里云的服务器 学生价9 5元一个月 百度直接搜索阿里云 然后点击右上角登录 推荐大家用支付宝扫码登录 方便快捷 阿里云官网的东西比较多 登录后我找了很久也没有找到学生服务器在哪里卖 最后在咨询里找到了这个网
  • 喜爱夜蒲3_百度百科

    喜爱夜蒲3 百度百科 喜爱夜蒲3
  • LeetCode707.设计链表

    题目描述 707 设计链表 力扣 LeetCode 这道题用单向链表和双向链表都能写 因为对双向链表不是很熟 所以就用双向链表来写了 由于初始化的链表并没有放入任何元素 所以这个结点就当成哑结点来处理 而且这样对之后的增删操作也更便利 C语
  • 通配符的使用

    通配符是一种特殊语句 主要有星号 和问号 用来模糊搜索文件 当查找文件夹时 可以使用它来代替一个或多个真正字符 当不知道真正字符或者懒得输入完整名字时 常常使用通配符代替一个或多个真正的字符 SQL 通配符 在搜索数据库中的数据时 SQL
  • java最大线程数

    Xms 初始堆大小 如 Xms256m Xmx 最大堆大小 如 Xmx512m Xmn 新生代大小 通常为 Xmx 的 1 3 或 1 4 新生代 Eden 2 个 Survivor 空间 实际可用空间为 Eden 1 个 Survivor
  • 华为OD机试 - 经典屏保(Java)

    题目描述 DVD机在视频输出时 为了保护电视显像管 在待机状态会显示 屏保动画 如下图所示 DVD Logo在屏幕内来回运动 碰到边缘会反弹 请根据如下要求 实现屏保Logo坐标的计算算法 屏幕是一个800 600像素的矩形 规定屏幕的左上
  • PermissionError: [WinError 5] 拒绝访问。解决办法

    PermissionError WinError 5 拒绝访问 问题描述 解决办法 一 找到programdata下anaconda3的python 二 进入Users的权限 将除了特殊权限外 全部挂上 三 在返回到anaconda3的目录
  • Nginx-简介

    用Python语言开发的站点使用的Web服务器主要有Nginx Apache以及淘宝的Tengine Nginx是由Igor Sysoev在2004年发布的一个开源 高性能的HTTP服务器和反向代理 它还可以用来作为IMAP POP3的代理
  • K8s基础6——应用配置管理方案、调度策略、污点和污点容忍

    文章目录 一 应用配置管理方案 1 1 ConfigMap 1 1 1 注入变量 1 1 2 挂载数据卷 1 2 Secret 1 2 1 数据卷挂载 1 2 2 变量注入 二 调度策略 2 1 nodeSelector定向调度 2 1 1
  • Github上 10 个开源免费且优秀的后台控制面板

    Web 开发中几乎的平台都需要一个后台管理 但是从零开发一套后台控制面板并不容易 幸运的是有很多开源免费的后台控制面板可以给开发者使用 那么有哪些优秀的开源免费的控制面板呢 我在 Github 上收集了一些优秀的后台控制面板 并总结得出 T
  • HTTP协议(下)

    前面我介绍了什么是HTTP协议 以及HTTP的协议格式 接下来我介绍一下如何使用代码构造出HTTP请求 以及在介绍一下HTTPS 目录 一 通过代码构造HTTP请求 1 基于HTML JS 1 1 基于form表单 1 2 基于ajax 2
  • vue + threejs 给3D模型添加label标签(dom的方式)

    webGL js封装的代码 const THREE window THREE webGL对象配置 export const webglOBJ renderDom null Scene null 场景 camera null 摄像头 rend
  • java OpenOffice把word转html(Convert word to html )

    1 下载安装OpenOffice 网址http download openoffice org index html 2 下载第三方工具包JODConverter http www artofsolving com opensource j
  • 天梯赛字符串替换题 “ 6翻了” Python 正则表达式替换

    输入格式 输入在一行中给出一句话 即一个非空字符串 由不超过 1000 个英文字母 数字和空格组成 以回车结束 输出格式 从左到右扫描输入的句子 如果句子中有超过 3 个连续的 6 则将这串连续的 6 替换成 9 但如果有超过 9 个连续的
  • selenium之 chromedriver与chrome版本映射表(更新至v2.46)

    更多关于python selenium的文章 请关注我的专栏 Python Selenium自动化测试详解 看到网上基本没有最新的chromedriver与chrome的对应关系表 便兴起整理了一份如下 希望对大家有用 chromedriv
  • 包里替换class文件_为了让Tomcat支持热替换,我直接修改了他的源码

    前言 又是一个周日 贫穷的我依然使用电源适配器来暖手 所以 这章来我们聊聊 热 这个问题 啊啊啊啊啊啊 不知道各位网友是怎么解决修改代码后 不重启 立即生效对的 如果在Spring Boot项目中 可能有部分人会加入spring boot
  • DES加密算法详解——看这一篇就够了!

    目录 一 DES简介 二 DES算法入参 三 DES加密算法步骤解析 1 IP置换 M gt M0 2 密钥K控制的16轮运算 M0 K1 K16 gt M16 2 1 子密钥Kn的计算 2 1 1 PC 1置换 2 1 2 循环左移运算