ger) ''''标准的TEA加密过程,参数lType 为1时表示16轮迭代(QQ使用的就是16轮迭代),否则为32轮迭代 Dim Y As Long, Z As Long Dim K1 As Long, K2 As Long, K3 As Long, K4 As Long Dim L1 As Long, L2 As Long, L3 As Long, L4 As Long Dim Sum As Long Dim i As Integer, Rounds As Integer Dim mResult(0 To 1) As Long Y = v(0) Z = v(1) K1 = k(0) K2 = k(1) K3 = k(2) K4 = k(3) If lType = 1 Then Rounds = 16 Else Rounds = 32 End If For i = 1 To Rounds ''''sum += delta ; Sum = AddLong(Sum, DELTA) ''''y += (z<<4)+k[0] ^ z+sum ^ (z>>5)+k[1] L1 = LeftRotateLong(Z, 4) L1 = AddLong(L1, K1) L2 = AddLong(Z, Sum) L3 = RightRotateLong(Z, 5) L3 = AddLong(L3, K2) L4 = L1 Xor L2 Xor L3 Y = AddLong(Y, L4) ''''z += (y<<4)+k[2] ^ y+sum ^ (y>>5)+k[3] L1 = LeftRotateLong(Y, 4) L1 = AddLong(L1, K3) L2 = AddLong(Y, Sum) L3 = RightRotateLong(Y, 5) L3 = AddLong(L3, K4) L4 = L1 Xor L2 Xor L3 Z = AddLong(Z, L4) Next v(0) = Y v(1) = Z End SubPublic Sub TeaDecode(v() As Long, k() As Long, lType As Integer) ''''标准TEA解密过程,参数lType 为1时表示16轮迭代(QQ使用的就是16轮迭代),否则为32轮迭代 Dim Y As Long, Z As Long Dim K1 As Long, K2 As Long, K3 As Long, K4 As Long Dim L1 As Long, L2 As Long, L3 As Long, L4 As Long Dim Sum As Long Dim i As Integer, Rounds As Integer Dim mResult(0 To 1) As Long Y = v(0) Z = v(1) K1 = k(0) K2 = k(1) K3 = k(2) K4 = k(3) If lType = 1 Then Rounds = 16 Sum = LeftRotateLong(DELTA, 4) Else Rounds = 32 Sum = LeftRotateLong(DELTA, 5) End If For i = 1 To Rounds L1 = LeftRotateLong(Y, 4) L1 = AddLong(L1, K3) L2 = AddLong(Y, Sum) L3 = RightRotateLong(Y, 5) L3 = AddLong(L3, K4) L4 = L1 Xor L2 Xor L3 Z = SubtractLong(Z, L4) L1 = LeftRotateLong(Z, 4) L1 = AddLong(L1, K1) L2 = AddLong(Z, Sum) L3 = RightRotateLong(Z, 5) L3 = AddLong(L3, K2) L4 = L1 Xor L2 Xor L3 Y = SubtractLong(Y, L4) Sum = SubtractLong(Sum, DELTA) Next v(0) = Y v(1) = Z End Sub
上一页 [1] [2] |