-摘抄于网络
'''' MD5加密算法在VB中的实现
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 Function End If
value1 = Right$(value1, 8) tempstr = String$(8 - Len(value1), "0") + value1 value1 = ""
'''' Convert to binary For loopit = 1 To 8 tempnum = Val("&H" + Mid$(tempstr, loopit, 1)) For loopinner = 3 To 0 Step -1 If tempnum And 2 ^ loopinner Then value1 = value1 + "1" Else value1 = value1 + "0" End If Next loopinner Next loopit tempstr = Mid$(value1, rots + 1) + Left$(value1, rots)
'''' And convert back to hex value1 = "" For loopit = 0 To 7 tempnum = 0 For loopinner = 0 To 3 If Val(Mid$(tempstr, 4 * loopit + loopinner + 1, 1)) Then
& [1] [2] 下一页 没有相关教程
|