打印本文 打印本文 关闭窗口 关闭窗口
[原创]TEA算法的VB实现代码
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2061  更新时间:2009/4/23 15:37:20  文章录入:mintao  责任编辑:mintao
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 Sub

Public 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] 

打印本文 打印本文 关闭窗口 关闭窗口