频道栏目
首页 > 资讯 > Visual Basic > 正文

经典加密算法在VB中的实现:MD5

10-03-30        来源:[db:作者]  
收藏   我要投稿

 Option Explicit
  Dim w1 As String, w2 As String, w3 As String, w4 As String
  Function MD5F(ByVal tempstr As String, ByVal w As String, ByVal X As S
  tring, ByVal y As String, ByVal z As String, ByVal Xin As String, ByVa
  l qdata As String, ByVal rots As Integer)
  MD5F = BigMod32Add(RotLeft(BigMod32Add(BigMod32Add(w, tempstr), Bi
  gMod32Add(Xin, qdata)), rots), X)
  End Function
  Sub MD5F1(w As String, ByVal X As String, ByVal y As String, ByVal z A
  s String, ByVal Xin As String, ByVal qdata As String, ByVal rots As In
  teger)
  Dim tempstr As String
  tempstr = BigXOR(z, BigAND(X, BigXOR(y, z)))
  w = MD5F(tempstr, w, X, y, z, Xin, qdata, rots)
  End Sub
  Sub MD5F2(w As String, ByVal X As String, ByVal y As String, ByVal z A
  s String, ByVal Xin As String, ByVal qdata As String, ByVal rots As In
  teger)
  Dim tempstr As String
  tempstr = BigXOR(y, BigAND(z, BigXOR(X, y)))
  w = MD5F(tempstr, w, X, y, z, Xin, qdata, rots)
  End Sub
  Sub MD5F3(w As String, ByVal X As String, ByVal y As String, ByVal z A
  s String, ByVal Xin As String, ByVal qdata As String, ByVal rots As In
  teger)
  Dim tempstr As String
  tempstr = BigXOR(X, BigXOR(y, z))
  w = MD5F(tempstr, w, X, y, z, Xin, qdata, rots)
  End Sub
  Sub MD5F4(w As String, ByVal X As String, ByVal y As String, ByVal z A
  s String, ByVal Xin As String, ByVal qdata As String, ByVal rots As In
  teger)
  Dim tempstr As String
  tempstr = BigXOR(y, BigOR(X, BigNOT(z)))
  w = MD5F(tempstr, w, X, y, z, Xin, qdata, rots)
  End Sub
  Function MD5_Calc(ByVal hashthis As String) As String
  ReDim buf(0 To 3) As String
  ReDim Xin(0 To 15) As String
  Dim tempnum As Integer, tempnum2 As Integer, loopit As Integer, loopou
  ter As Integer, loopinner As Integer
  Dim a As String, b As String, c As String, d As String
   Add padding
  tempnum = 8 * Len(hashthis)
  hashthis = hashthis + Chr$(128) Add binary 10000000
  tempnum2 = 56 - Len(hashthis) Mod 64
  If tempnum2 < 0 Then
  tempnum2 = 64 + tempnum2
  End If
  hashthis = hashthis + String$(tempnum2, Chr$(0))
  For loopit = 1 To 8
  hashthis = hashthis + Chr$(tempnum Mod 256)
  tempnum = tempnum - tempnum Mod 256
  tempnum = tempnum / 256
  Next loopit
   Set magic numbers
  buf(0) = "67452301"
  buf(1) = "efcdab89"
  buf(2) = "98badcfe"
  buf(3) = "10325476"
   For each 512 bit section
  For loopouter = 0 To Len(hashthis) / 64 - 1
  a = buf(0)
  b = buf(1)
  c = buf(2)
  d = buf(3)
   Get the 512 bits
  For loopit = 0 To 15
  Xin(loopit) = ""
  For loopinner = 1 To 4
  Xin(loopit) = Hex$(Asc(Mid$(hashthis, 64 * loopouter +
  4 * loopit + loopinner, 1))) + Xin(loopit)
  If Len(Xin(loopit)) Mod 2 Then Xin(loopit) = "0" + Xin
  (loopit)
  Next loopinner
  Next loopit
   Round 1

 MD5F1 a, b, c, d, Xin(0), "d76aa478", 7
  MD5F1 d, a, b, c, Xin(1), "e8c7b756", 12
  MD5F1 c, d, a, b, Xin(2), "242070db", 17
  MD5F1 b, c, d, a, Xin(3), "c1bdceee", 22
  MD5F1 a, b, c, d, Xin(4), "f57c0faf", 7
  MD5F1 d, a, b, c, Xin(5), "4787c62a", 12
  MD5F1 c, d, a, b, Xin(6), "a8304613", 17
  MD5F1 b, c, d, a, Xin(7), "fd469501", 22
  MD5F1 a, b, c, d, Xin(8), "698098d8", 7
  MD5F1 d, a, b, c, Xin(9), "8b44f7af", 12
  MD5F1 c, d, a, b, Xin(10), "ffff5bb1", 17
  MD5F1 b, c, d, a, Xin(11), "895cd7be", 22
  MD5F1 a, b, c, d, Xin(12), "6b901122", 7
  MD5F1 d, a, b, c, Xin(13), "fd987193", 12
  MD5F1 c, d, a, b, Xin(14), "a679438e", 17
  MD5F1 b, c, d, a, Xin(15), "49b40821", 22
   Round 2
  MD5F2 a, b, c, d, Xin(1), "f61e2562", 5
  MD5F2 d, a, b, c, Xin(6), "c040b340", 9
  MD5F2 c, d, a, b, Xin(11), "265e5a51", 14
  MD5F2 b, c, d, a, Xin(0), "e9b6c7aa", 20
  MD5F2 a, b, c, d, Xin(5), "d62f105d", 5
  MD5F2 d, a, b, c, Xin(10), "02441453", 9
  MD5F2 c, d, a, b, Xin(15), "d8a1e681", 14
  MD5F2 b, c, d, a, Xin(4), "e7d3fbc8", 20
  MD5F2 a, b, c, d, Xin(9), "21e1cde6", 5
  MD5F2 d, a, b, c, Xin(14), "c33707d6", 9
  MD5F2 c, d, a, b, Xin(3), "f4d50d87", 14
  MD5F2 b, c, d, a, Xin(8), "455a14ed", 20
  MD5F2 a, b, c, d, Xin(13), "a9e3e905", 5
  MD5F2 d, a, b, c, Xin(2), "fcefa3f8", 9
  MD5F2 c, d, a, b, Xin(7), "676f02d9", 14
  MD5F2 b, c, d, a, Xin(12), "8d2a4c8a", 20
   Round 3
  MD5F3 a, b, c, d, Xin(5), "fffa3942", 4
  MD5F3 d, a, b, c, Xin(8), "8771f681", 11
  MD5F3 c, d, a, b, Xin(11), "6d9d6122", 16
  MD5F3 b, c, d, a, Xin(14), "fde5380c", 23
  MD5F3 a, b, c, d, Xin(1), "a4beea44", 4
  MD5F3 d, a, b, c, Xin(4), "4bdecfa9", 11
  MD5F3 c, d, a, b, Xin(7), "f6bb4b60", 16
  MD5F3 b, c, d, a, Xin(10), "bebfbc70", 23
  MD5F3 a, b, c, d, Xin(13), "289b7ec6", 4
  MD5F3 d, a, b, c, Xin(0), "e27fa", 11
  MD5F3 c, d, a, b, Xin(3), "d4ef3085", 16
  MD5F3 b, c, d, a, Xin(6), "04881d05", 23
  MD5F3 a, b, c, d, Xin(9), "d9d4d039", 4
  MD5F3 d, a, b, c, Xin(12), "e6db99e5", 11
  MD5F3 c, d, a, b, Xin(15), "1fa27cf8", 16
  MD5F3 b, c, d, a, Xin(2), "c4ac5665", 23
   Round 4
  MD5F4 a, b, c, d, Xin(0), "f4292244", 6
  MD5F4 d, a, b, c, Xin(7), "432aff97", 10
  MD5F4 c, d, a, b, Xin(14), "ab9423a7", 15
  MD5F4 b, c, d, a, Xin(5), "fc93a039", 21
  MD5F4 a, b, c, d, Xin(12), "655b59c3", 6
  MD5F4 d, a, b, c, Xin(3), "8f0ccc92", 10
  MD5F4 c, d, a, b, Xin(10), "ffeff47d", 15
  MD5F4 b, c, d, a, Xin(1), "85845dd1", 21
  MD5F4 a, b, c, d, Xin(8), "6fa87e4f", 6
  MD5F4 d, a, b, c, Xin(15), "fe2ce6e0", 10
  MD5F4 c, d, a, b, Xin(6), "a3014314", 15
  MD5F4 b, c, d, a, Xin(13), "4e0811a1", 21
  MD5F4 a, b, c, d, Xin(4), "f7537e82", 6
  MD5F4 d, a, b, c, Xin(11), "bd3af235", 10
  MD5F4 c, d, a, b, Xin(2), "2ad7d2bb", 15
  MD5F4 b, c, d, a, Xin(9), "eb86d391", 21
  buf(0) = BigAdd(buf(0), a)
  buf(1) = BigAdd(buf(1), b)
  buf(2) = BigAdd(buf(2), c)
  buf(3) = BigAdd(buf(3), d)
  Next loopouter Extract MD5Hash
  hashthis = ""
  For loopit = 0 To 3
  For loopinner = 3 To 0 Step -1
  hashthis = hashthis + Chr(Val("&H" + Mid$(buf(loopit), 1 +
  2 * loopinner, 2)))
  Next loopinner
  Next loopit
   And return it
  MD5_Calc = hashthis
  End Function
  Function BigMod32Add(ByVal value1 As String, ByVal value2 As String) A
  s String
  BigMod32Add = Right$(BigAdd(value1, value2), 8)
  End Function
  Public Function BigAdd(ByVal value1 As String, ByVal value2 As String)
  As String
  Dim valueans As String
  Dim loopit As Integer, tempnum As Integer
  tempnum = Len(value1) - Len(value2)
  If tempnum < 0 Then
  value1 = Space$(Abs(tempnum)) + value1
  ElseIf tempnum > 0 Then
  value2 = Space$(Abs(tempnum)) + value2
  End If
  tempnum = 0
  For loopit = Len(value1) To 1 Step -1
  tempnum = tempnum + Val("&H" + Mid$(value1, loopit, 1)) + Val(
  "&H" + Mid$(value2, loopit, 1))
  valueans = Hex$(tempnum Mod 16) + valueans
  tempnum = Int(tempnum / 16)
  Next loopit
  If tempnum <> 0 Then
  valueans = Hex$(tempnum) + valueans
  End If
  BigAdd = Right(valueans, 8)
  End Function
  Public Function RotLeft(ByVal value1 As String, ByVal rots As Integer)
  As String
  Dim tempstr As String
  Dim loopit As Integer, loopinner As Integer
  Dim tempnum As Integer
  rots = rots Mod 32
  If rots = 0 Then
  RotLeft = value1
  Exit Fu

相关TAG标签
上一篇:经典加密算法在VB中的实现:RC4
下一篇:经典加密算法在VB中的实现:Base64
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站