📄 desencode.bas
字号:
Dim C13(27) As Byte: Dim D13(27) As Byte:
Dim C14(27) As Byte: Dim D14(27) As Byte:
Dim C15(27) As Byte: Dim D15(27) As Byte:
Dim C16(27) As Byte: Dim D16(27) As Byte:
Dim C_D(55) As Byte 'Cn,Dn合并后的存放处
Dim K1(47) As Byte: Dim K2(47) As Byte: Dim K3(47) As Byte: Dim K4(47) As Byte:
Dim K5(47) As Byte: Dim K6(47) As Byte: Dim K7(47) As Byte: Dim K8(47) As Byte:
Dim K9(47) As Byte: Dim K10(47) As Byte: Dim K11(47) As Byte: Dim K12(47) As Byte:
Dim K13(47) As Byte: Dim K14(47) As Byte: Dim K15(47) As Byte: Dim K16(47) As Byte:
Dim i As Integer
Dim j As Integer
tempKey = StrConv(sKey, vbFromUnicode)
ReDim Preserve tempKey(7)
For i = 0 To 7
BinKey(i * 8 + 0) = (tempKey(i) And &H80) \ &H80
BinKey(i * 8 + 1) = (tempKey(i) And &H40) \ &H40
BinKey(i * 8 + 2) = (tempKey(i) And &H20) \ &H20
BinKey(i * 8 + 3) = (tempKey(i) And &H10) \ &H10
BinKey(i * 8 + 4) = (tempKey(i) And &H8) \ &H8
BinKey(i * 8 + 5) = (tempKey(i) And &H4) \ &H4
BinKey(i * 8 + 6) = (tempKey(i) And &H2) \ &H2
BinKey(i * 8 + 7) = (tempKey(i) And &H1) \ &H1
Next
'PC_1转换
For i = 0 To 55
KeyPC_1(i) = BinKey(PC_1(i))
Next
'生成C0,D0
For i = 0 To 27
C0(i) = KeyPC_1(i)
D0(i) = KeyPC_1(i + 28)
Next
'---------------------------------------------------K1
'生成C1,D1
For i = 0 To 26
C1(i) = C0(i + Lsi(1))
D1(i) = D0(i + Lsi(1))
Next
C1(27) = C0(0)
D1(27) = D0(0)
'组合C1,D1成C_D
For i = 0 To 27
C_D(i) = C1(i)
C_D(i + 28) = D1(i)
Next
'PC_2转换,生成K1
For i = 0 To 47
K1(i) = C_D(PC_2(i))
Next
'---------------------------------------------------K2
'生成C2,D2
For i = 0 To 26
C2(i) = C1(i + Lsi(2))
D2(i) = D1(i + Lsi(2))
Next
C2(27) = C1(0)
D2(27) = D1(0)
'组合C2,D2成C_D
For i = 0 To 27
C_D(i) = C2(i)
C_D(i + 28) = D2(i)
Next
'PC_2转换,生成K2
For i = 0 To 47
K2(i) = C_D(PC_2(i))
Next
'---------------------------------------------------K3
'生成C3,D3
For i = 0 To 25
C3(i) = C2(i + Lsi(3))
D3(i) = D2(i + Lsi(3))
Next
C3(26) = C2(0)
D3(26) = D2(0)
C3(27) = C2(1)
D3(27) = D2(1)
'组合C3,D3成C_D
For i = 0 To 27
C_D(i) = C3(i)
C_D(i + 28) = D3(i)
Next
'PC_2转换,生成K3
For i = 0 To 47
K3(i) = C_D(PC_2(i))
Next
'---------------------------------------------------K4
'生成C4,D4
For i = 0 To 25
C4(i) = C3(i + Lsi(4))
D4(i) = D3(i + Lsi(4))
Next
C4(26) = C3(0)
D4(26) = D3(0)
C4(27) = C3(1)
D4(27) = D3(1)
'组合C4,D4成C_D
For i = 0 To 27
C_D(i) = C4(i)
C_D(i + 28) = D4(i)
Next
'PC_2转换,生成K4
For i = 0 To 47
K4(i) = C_D(PC_2(i))
Next
'---------------------------------------------------K5
'生成C5,D5
For i = 0 To 25
C5(i) = C4(i + Lsi(5))
D5(i) = D4(i + Lsi(5))
Next
C5(26) = C4(0)
D5(26) = D4(0)
C5(27) = C4(1)
D5(27) = D4(1)
'组合C5,D5成C_D
For i = 0 To 27
C_D(i) = C5(i)
C_D(i + 28) = D5(i)
Next
'PC_2转换,生成K5
For i = 0 To 47
K5(i) = C_D(PC_2(i))
Next
'---------------------------------------------------K6
'生成C6,D6
For i = 0 To 25
C6(i) = C5(i + Lsi(6))
D6(i) = D5(i + Lsi(6))
Next
C6(26) = C5(0)
D6(26) = D5(0)
C6(27) = C5(1)
D6(27) = D5(1)
'组合C6,D6成C_D
For i = 0 To 27
C_D(i) = C6(i)
C_D(i + 28) = D6(i)
Next
'PC_2转换,生成K6
For i = 0 To 47
K6(i) = C_D(PC_2(i))
Next
'---------------------------------------------------K7
'生成C7,D7
For i = 0 To 25
C7(i) = C6(i + Lsi(7))
D7(i) = D6(i + Lsi(7))
Next
C7(26) = C6(0)
D7(26) = D6(0)
C7(27) = C6(1)
D7(27) = D6(1)
'组合C7,D7成C_D
For i = 0 To 27
C_D(i) = C7(i)
C_D(i + 28) = D7(i)
Next
'PC_2转换,生成K7
For i = 0 To 47
K7(i) = C_D(PC_2(i))
Next
'---------------------------------------------------K8
'生成C8,D8
For i = 0 To 25
C8(i) = C7(i + Lsi(8))
D8(i) = D7(i + Lsi(8))
Next
C8(26) = C7(0)
D8(26) = D7(0)
C8(27) = C7(1)
D8(27) = D7(1)
'组合C8,D8成C_D
For i = 0 To 27
C_D(i) = C8(i)
C_D(i + 28) = D8(i)
Next
'PC_2转换,生成K8
For i = 0 To 47
K8(i) = C_D(PC_2(i))
Next
'---------------------------------------------------K9
'生成C9,D9
For i = 0 To 26
C9(i) = C8(i + Lsi(9))
D9(i) = D8(i + Lsi(9))
Next
C9(27) = C8(0)
D9(27) = D8(0)
'组合C9,D9成C_D
For i = 0 To 27
C_D(i) = C9(i)
C_D(i + 28) = D9(i)
Next
'PC_2转换,生成K9
For i = 0 To 47
K9(i) = C_D(PC_2(i))
Next
'---------------------------------------------------K10
'生成C10,D10
For i = 0 To 25
C10(i) = C9(i + Lsi(10))
D10(i) = D9(i + Lsi(10))
Next
C10(26) = C9(0)
D10(26) = D9(0)
C10(27) = C9(1)
D10(27) = D9(1)
'组合C10,D10成C_D
For i = 0 To 27
C_D(i) = C10(i)
C_D(i + 28) = D10(i)
Next
'PC_2转换,生成K10
For i = 0 To 47
K10(i) = C_D(PC_2(i))
Next
'---------------------------------------------------K11
'生成C11,D11
For i = 0 To 25
C11(i) = C10(i + Lsi(11))
D11(i) = D10(i + Lsi(11))
Next
C11(26) = C10(0)
D11(26) = D10(0)
C11(27) = C10(1)
D11(27) = D10(1)
'组合C11,D11成C_D
For i = 0 To 27
C_D(i) = C11(i)
C_D(i + 28) = D11(i)
Next
'PC_2转换,生成K11
For i = 0 To 47
K11(i) = C_D(PC_2(i))
Next
'---------------------------------------------------K12
'生成C12,D12
For i = 0 To 25
C12(i) = C11(i + Lsi(12))
D12(i) = D11(i + Lsi(12))
Next
C12(26) = C11(0)
D12(26) = D11(0)
C12(27) = C11(1)
D12(27) = D11(1)
'组合C12,D12成C_D
For i = 0 To 27
C_D(i) = C12(i)
C_D(i + 28) = D12(i)
Next
'PC_2转换,生成K12
For i = 0 To 47
K12(i) = C_D(PC_2(i))
Next
'---------------------------------------------------K13
'生成C13,D13
For i = 0 To 25
C13(i) = C12(i + Lsi(13))
D13(i) = D12(i + Lsi(13))
Next
C13(26) = C12(0)
D13(26) = D12(0)
C13(27) = C12(1)
D13(27) = D12(1)
'组合C13,D13成C_D
For i = 0 To 27
C_D(i) = C13(i)
C_D(i + 28) = D13(i)
Next
'PC_2转换,生成K13
For i = 0 To 47
K13(i) = C_D(PC_2(i))
Next
'---------------------------------------------------K14
'生成C14,D14
For i = 0 To 25
C14(i) = C13(i + Lsi(14))
D14(i) = D13(i + Lsi(14))
Next
C14(26) = C13(0)
D14(26) = D13(0)
C14(27) = C13(1)
D14(27) = D13(1)
'组合C14,D14成C_D
For i = 0 To 27
C_D(i) = C14(i)
C_D(i + 28) = D14(i)
Next
'PC_2转换,生成K14
For i = 0 To 47
K14(i) = C_D(PC_2(i))
Next
'---------------------------------------------------K15
'生成C15,D15
For i = 0 To 25
C15(i) = C14(i + Lsi(15))
D15(i) = D14(i + Lsi(15))
Next
C15(26) = C14(0)
D15(26) = D14(0)
C15(27) = C14(1)
D15(27) = D14(1)
'组合C15,D15成C_D
For i = 0 To 27
C_D(i) = C15(i)
C_D(i + 28) = D15(i)
Next
'PC_2转换,生成K15
For i = 0 To 47
K15(i) = C_D(PC_2(i))
Next
'---------------------------------------------------K16
'生成C16,D16
For i = 0 To 26
C16(i) = C15(i + Lsi(16))
D16(i) = D15(i + Lsi(16))
Next
C16(27) = C15(0)
D16(27) = D15(0)
'组合C16,D16成C_D
For i = 0 To 27
C_D(i) = C16(i)
C_D(i + 28) = D16(i)
Next
'PC_2转换,生成K16
For i = 0 To 47
K16(i) = C_D(PC_2(i))
Next
'--------------------------------------------------------------------------------------
'加密过程
CopyMemory tempCode(0), sCode(0), 8
For i = 0 To 7
BinCode(i * 8 + 0) = (tempCode(i) And &H80) \ &H80
BinCode(i * 8 + 1) = (tempCode(i) And &H40) \ &H40
BinCode(i * 8 + 2) = (tempCode(i) And &H20) \ &H20
BinCode(i * 8 + 3) = (tempCode(i) And &H10) \ &H10
BinCode(i * 8 + 4) = (tempCode(i) And &H8) \ &H8
BinCode(i * 8 + 5) = (tempCode(i) And &H4) \ &H4
BinCode(i * 8 + 6) = (tempCode(i) And &H2) \ &H2
BinCode(i * 8 + 7) = (tempCode(i) And &H1) \ &H1
Next i
'IP置换
For i = 0 To 63
CodeIP(i) = BinCode(IP(i))
Next i
'分段
For i = 0 To 31
L0(i) = CodeIP(i)
R0(i) = CodeIP(i + 32)
Next i
'进行第一次迭代
For i = 0 To 47
CodeE(i) = R0(E(i)) '经过E变换扩充,由32位变为48位
CodeE(i) = CodeE(i) Xor K1(i) '与K1按位作不进位加法运算
Next
'分8组
For i = 0 To 5
CodeS1(i) = CodeE(i)
CodeS2(i) = CodeE(i + 6)
CodeS3(i) = CodeE(i + 12)
CodeS4(i) = CodeE(i + 18)
CodeS5(i) = CodeE(i + 24)
CodeS6(i) = CodeE(i + 30)
CodeS7(i) = CodeE(i + 36)
CodeS8(i) = CodeE(i + 42)
Next
'S盒运算,得到8个数
s(0) = S1(CodeS1(5) + CodeS1(0) * 2, CodeS1(4) + CodeS1(3) * 2 + CodeS1(2) * 4 + CodeS1(1) * 8)
s(1) = S2(CodeS2(5) + CodeS2(0) * 2, CodeS2(4) + CodeS2(3) * 2 + CodeS2(2) * 4 + CodeS2(1) * 8)
s(2) = S3(CodeS3(5) + CodeS3(0) * 2, CodeS3(4) + CodeS3(3) * 2 + CodeS3(2) * 4 + CodeS3(1) * 8)
s(3) = S4(CodeS4(5) + CodeS4(0) * 2, CodeS4(4) + CodeS4(3) * 2 + CodeS4(2) * 4 + CodeS4(1) * 8)
s(4) = S5(CodeS5(5) + CodeS5(0) * 2, CodeS5(4) + CodeS5(3) * 2 + CodeS5(2) * 4 + CodeS5(1) * 8)
s(5) = S6(CodeS6(5) + CodeS6(0) * 2, CodeS6(4) + CodeS6(3) * 2 + CodeS6(2) * 4 + CodeS6(1) * 8)
s(6) = S7(CodeS7(5) + CodeS7(0) * 2, CodeS7(4) + CodeS7(3) * 2 + CodeS7(2) * 4 + CodeS7(1) * 8)
s(7) = S8(CodeS8(5) + CodeS8(0) * 2, CodeS8(4) + CodeS8(3) * 2 + CodeS8(2) * 4 + CodeS8(1) * 8)
'S盒运算32位结果
For i = 0 To 7
RetS(i * 4 + 0) = (s(i) And &H8) \ &H8
RetS(i * 4 + 1) = (s(i) And &H4) \ &H4
RetS(i * 4 + 2) = (s(i) And &H2) \ &H2
RetS(i * 4 + 3) = (s(i) And &H1) \ &H1
Next
For i = 0 To 31
'P变换
CodeP(i) = RetS(P(i))
'产生L1,R1
R1(i) = L0(i) Xor CodeP(i)
L1(i) = R0(i)
Next
'进行第二次迭代
For i = 0 To 47
CodeE(i) = R1(E(i)) '经过E变换扩充,由32位变为48位
CodeE(i) = CodeE(i) Xor K2(i) '与K2按位作不进位加法运算
Next
'分8组
For i = 0 To 5
CodeS1(i) = CodeE(i)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -