⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 desencode.bas

📁 本程序封装了一个加解密模块. 使用时直接调用其中的函数即可.
💻 BAS
📖 第 1 页 / 共 5 页
字号:
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 + -