?? des.txt
字號:
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
'**************************************************************************************
'將明文位數擴展為8的倍數
If (UBound(sCode) + 1) Mod 8 > 0 Then ReDim Preserve sCode(((UBound(sCode) + 1) \ 8 + 1) * 8 - 1)
'定義返回密文長度
ReDim bReturn(UBound(sCode))
For j = 0 To UBound(sCode) Step 8
'加密過程
'依次取8位加密
CopyMemory tempCode(0), sCode(j), 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
'IP置換
For i = 0 To 63
CodeIP(i) = BinCode(IP(i))
Next
'分段
For i = 0 To 31
L0(i) = CodeIP(i)
R0(i) = CodeIP(i + 32)
Next
'進行第一次迭代
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)
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))
'產生L2,R2
R2(i) = L1(i) Xor CodeP(i)
L2(i) = R1(i)
Next
'進行第三次迭代
For i = 0 To 47
CodeE(i) = R2(E(i)) '經過E變換擴充,由32位變為48位
CodeE(i) = CodeE(i) Xor K3(i) '與K3按位作不進位加法運算
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))
'產生L3,R3
R3(i) = L2(i) Xor CodeP(i)
L3(i) = R2(i)
Next
'進行第四次迭代
For i = 0 To 47
CodeE(i) = R3(E(i)) '經過E變換擴充,由32位變為48位
CodeE(i) = CodeE(i) Xor K4(i) '與K4按位作不進位加法運算
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))
'產生L4,R4
R4(i) = L3(i) Xor CodeP(i)
L4(i) = R3(i)
Next
'進行第五次迭代
For i = 0 To 47
CodeE(i) = R4(E(i)) '經過E變換擴充,由32位變為48位
CodeE(i) = CodeE(i) Xor K5(i) '與K5按位作不進位加法運算
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))
'產生L5,R5
R5(i) = L4(i) Xor CodeP(i)
L5(i) = R4(i)
Next
'進行第六次迭代
For i = 0 To 47
CodeE(i) = R5(E(i)) '經過E變換擴充,由32位變為48位
CodeE(i) = CodeE(i) Xor K6(i) '與K6按位作不進位加法運算
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))
'產生L6,R6
R6(i) = L5(i) Xor CodeP(i)
L6(i) = R5(i)
Next
'進行第7次迭代
For i = 0 To 47
CodeE(i) = R6(E(i)) '經過E變換擴充,由32位變為48位
CodeE(i) = CodeE(i) Xor K7(i) '與K7按位作不進位加法運算
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))
'產生L7,R7
R7(i) = L6(i) Xor CodeP(i)
L7(i) = R6(i)
Next
'進行第8次迭代
For i = 0 To 47
CodeE(i) = R7(E(i)) '經過E變換擴充,由32位變為48位
CodeE(i) = CodeE(i) Xor K8(i) '與K8按位作不進位加法運算
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
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -