VB md5的HASH算法 适合与RSA一块使用

源代码在线查看: md5hash.bas

软件大小: 4 K
上传用户: LiuRong
关键词: HASH RSA md5 VB
下载地址: 免注册下载 普通下载 VIP

相关代码

				Attribute VB_Name = "MD5hash"
				'经典加密算法在VB中的实现 - MD5
				
				Option Explicit
				
				Dim w1 As String, w2 As String, w3 As String, w4 As String
				Public Declare Sub MD5 Lib "dllmd5.dll" (ByVal sChar As String, ByVal Ret16 As String, ByVal Ret32 As String)
				
				
				Function MD5F(ByVal tempstr As String, ByVal w As String, ByVal X As String, ByVal y As String, ByVal z As String, ByVal Xin As String, ByVal qdata As String, ByVal rots As Integer)
				    MD5F = BigMod32Add(RotLeft(BigMod32Add(BigMod32Add(w, tempstr), BigMod32Add(Xin, qdata)), rots), X)
				End Function
				
				Sub MD5F1(w As String, ByVal X As String, ByVal y As String, ByVal z As String, ByVal Xin As String, ByVal qdata As String, ByVal rots As Integer)
				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 As String, ByVal Xin As String, ByVal qdata As String, ByVal rots As Integer)
				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 As String, ByVal Xin As String, ByVal qdata As String, ByVal rots As Integer)
				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 As String, ByVal Xin As String, ByVal qdata As String, ByVal rots As Integer)
				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, loopouter 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"
				'    buf(0) = "01234567"
				'    buf(1) = "89cdabef"
				'    buf(2) = "fedcba98"
				'    buf(3) = "76543210"
				
				     
				
				    ' 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) As 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
				
				                tempnum = tempnum + 2 ^ (3 - loopinner)
				            End If
				        Next loopinner
				        value1 = value1 + Hex$(tempnum)
				    Next loopit
				
				    RotLeft = Right(value1, 8)
				End Function
				
				Function BigAND(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
				        value2 = Mid$(value2, Abs(tempnum) + 1)
				    ElseIf tempnum > 0 Then
				        value1 = Mid$(value1, tempnum + 1)
				    End If
				
				    For loopit = 1 To Len(value1)
				        valueans = valueans + Hex$(Val("&H" + Mid$(value1, loopit, 1)) And Val("&H" + Mid$(value2, loopit, 1)))
				    Next loopit
				
				    BigAND = valueans
				End Function
				
				Function BigNOT(ByVal value1 As String) As String
				Dim valueans As String
				Dim loopit As Integer
				
				    value1 = Right$(value1, 8)
				    value1 = String$(8 - Len(value1), "0") + value1
				    For loopit = 1 To 8
				        valueans = valueans + Hex$(15 Xor Val("&H" + Mid$(value1, loopit, 1)))
				    Next loopit
				
				    BigNOT = valueans
				End Function
				
				Function BigOR(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
				        valueans = Left$(value2, Abs(tempnum))
				        value2 = Mid$(value2, Abs(tempnum) + 1)
				    ElseIf tempnum > 0 Then
				        valueans = Left$(value1, Abs(tempnum))
				        value1 = Mid$(value1, tempnum + 1)
				    End If
				
				    For loopit = 1 To Len(value1)
				        valueans = valueans + Hex$(Val("&H" + Mid$(value1, loopit, 1)) Or Val("&H" + Mid$(value2, loopit, 1)))
				    Next loopit
				
				    BigOR = valueans
				End Function
				
				Function BigXOR(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
				        valueans = Left$(value2, Abs(tempnum))
				        value2 = Mid$(value2, Abs(tempnum) + 1)
				    ElseIf tempnum > 0 Then
				        valueans = Left$(value1, Abs(tempnum))
				        value1 = Mid$(value1, tempnum + 1)
				    End If
				
				    For loopit = 1 To Len(value1)
				        valueans = valueans + Hex$(Val("&H" + Mid$(value1, loopit, 1)) Xor Val("&H" + Mid$(value2, loopit, 1)))
				    Next loopit
				
				    BigXOR = Right(valueans, 8)
				End Function
				
							

相关资源