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
''''**************************************************************************************
''''将明文位数扩展为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 上一页 [1] [2] [3] [4] [5] [6] [7] 下一页 没有相关教程
|