飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3094|回复: 3

MD5之VB的另一种算法源程序

[复制链接]
  • TA的每日心情
    无聊
    2018-12-10 18:30
  • 签到天数: 70 天

    [LV.6]常住居民II

    发表于 2006-8-16 14:02:55 | 显示全部楼层 |阅读模式
    MD5之VB的另一种算法:

    1. Option Explicit

    2. Dim w1 As String, w2 As String, w3 As String, w4 As String

    3. 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)
    4. MD5F = BigMod32Add(RotLeft(BigMod32Add(BigMod32Add(w, tempstr), BigMod32Add(Xin, qdata)), rots), X)
    5. End Function

    6. 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)
    7. Dim tempstr As String

    8.     tempstr = BigXOR(z, BigAND(X, BigXOR(Y, z)))
    9.     w = MD5F(tempstr, w, X, Y, z, Xin, qdata, rots)
    10. End Sub

    11. 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)
    12. Dim tempstr As String

    13.     tempstr = BigXOR(Y, BigAND(z, BigXOR(X, Y)))
    14.     w = MD5F(tempstr, w, X, Y, z, Xin, qdata, rots)
    15. End Sub

    16. 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)
    17. Dim tempstr As String

    18.     tempstr = BigXOR(X, BigXOR(Y, z))
    19.     w = MD5F(tempstr, w, X, Y, z, Xin, qdata, rots)
    20. End Sub

    21. 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)
    22. Dim tempstr As String

    23.     tempstr = BigXOR(Y, BigOR(X, BigNOT(z)))
    24.     w = MD5F(tempstr, w, X, Y, z, Xin, qdata, rots)
    25. End Sub

    26. Function MD5_Calc(ByVal hashthis As String) As String
    27. ReDim buf(0 To 3) As String
    28. ReDim Xin(0 To 15) As String
    29. Dim tempnum As Integer, tempnum2 As Integer, loopit As Integer, loopouter As Integer, loopinner As Integer
    30. Dim A As String, b As String, c As String, d As String

    31.     tempnum = 8 * Len(hashthis)
    32.     hashthis = hashthis + Chr$(128) 'Add binary 10000000
    33.     tempnum2 = 56 - Len(hashthis) Mod 64

    34.     If tempnum2 < 0 Then
    35.         tempnum2 = 64 + tempnum2
    36.     End If

    37.     hashthis = hashthis + String$(tempnum2, Chr$(0))

    38.     For loopit = 1 To 8
    39.         hashthis = hashthis + Chr$(tempnum Mod 256)
    40.         tempnum = tempnum - tempnum Mod 256
    41.         tempnum = tempnum / 256
    42.     Next loopit

    43.    
    44.     buf(0) = "67452301"
    45.     buf(1) = "efcdab89"
    46.     buf(2) = "98badcfe"
    47.     buf(3) = "10325476"

    48.    
    49. For loopouter = 0 To Len(hashthis) / 64 - 1
    50.         A = buf(0)
    51.         b = buf(1)
    52.         c = buf(2)
    53.         d = buf(3)

    54.         ' Get the 512 bits
    55.         For loopit = 0 To 15
    56.             Xin(loopit) = ""
    57.             For loopinner = 1 To 4
    58.                 Xin(loopit) = Hex$(Asc(Mid$(hashthis, 64 * loopouter + 4 * loopit + loopinner, 1))) + Xin(loopit)
    59.                 If Len(Xin(loopit)) Mod 2 Then Xin(loopit) = "0" + Xin(loopit)
    60.             Next loopinner
    61.         Next loopit

    62.         
    63.         ' Round 1
    64.         MD5F1 A, b, c, d, Xin(0), "d76aa478", 7
    65.         MD5F1 d, A, b, c, Xin(1), "e8c7b756", 12
    66.         MD5F1 c, d, A, b, Xin(2), "242070db", 17
    67.         MD5F1 b, c, d, A, Xin(3), "c1bdceee", 22
    68.         MD5F1 A, b, c, d, Xin(4), "f57c0faf", 7
    69.         MD5F1 d, A, b, c, Xin(5), "4787c62a", 12
    70.         MD5F1 c, d, A, b, Xin(6), "a8304613", 17
    71.         MD5F1 b, c, d, A, Xin(7), "fd469501", 22
    72.         MD5F1 A, b, c, d, Xin(8), "698098d8", 7
    73.         MD5F1 d, A, b, c, Xin(9), "8b44f7af", 12
    74.         MD5F1 c, d, A, b, Xin(10), "ffff5bb1", 17
    75.         MD5F1 b, c, d, A, Xin(11), "895cd7be", 22
    76.         MD5F1 A, b, c, d, Xin(12), "6b901122", 7
    77.         MD5F1 d, A, b, c, Xin(13), "fd987193", 12
    78.         MD5F1 c, d, A, b, Xin(14), "a679438e", 17
    79.         MD5F1 b, c, d, A, Xin(15), "49b40821", 22
    80.         
    81.         ' Round 2
    82.         MD5F2 A, b, c, d, Xin(1), "f61e2562", 5
    83.         MD5F2 d, A, b, c, Xin(6), "c040b340", 9
    84.         MD5F2 c, d, A, b, Xin(11), "265e5a51", 14
    85.         MD5F2 b, c, d, A, Xin(0), "e9b6c7aa", 20
    86.         MD5F2 A, b, c, d, Xin(5), "d62f105d", 5
    87.         MD5F2 d, A, b, c, Xin(10), "2441453", 9
    88.         MD5F2 c, d, A, b, Xin(15), "d8a1e681", 14
    89.         MD5F2 b, c, d, A, Xin(4), "e7d3fbc8", 20
    90.         MD5F2 A, b, c, d, Xin(9), "21e1cde6", 5
    91.         MD5F2 d, A, b, c, Xin(14), "c33707d6", 9
    92.         MD5F2 c, d, A, b, Xin(3), "f4d50d87", 14
    93.         MD5F2 b, c, d, A, Xin(8), "455a14ed", 20
    94.         MD5F2 A, b, c, d, Xin(13), "a9e3e905", 5
    95.         MD5F2 d, A, b, c, Xin(2), "fcefa3f8", 9
    96.         MD5F2 c, d, A, b, Xin(7), "676f02d9", 14
    97.         MD5F2 b, c, d, A, Xin(12), "8d2a4c8a", 20
    98.         
    99.         ' Round 3
    100.         MD5F3 A, b, c, d, Xin(5), "fffa3942", 4
    101.         MD5F3 d, A, b, c, Xin(8), "8771f681", 11
    102.         MD5F3 c, d, A, b, Xin(11), "6d9d6122", 16
    103.         MD5F3 b, c, d, A, Xin(14), "fde5380c", 23
    104.         MD5F3 A, b, c, d, Xin(1), "a4beea44", 4
    105.         MD5F3 d, A, b, c, Xin(4), "4bdecfa9", 11
    106.         MD5F3 c, d, A, b, Xin(7), "f6bb4b60", 16
    107.         MD5F3 b, c, d, A, Xin(10), "bebfbc70", 23
    108.         MD5F3 A, b, c, d, Xin(13), "289b7ec6", 4
    109.         MD5F3 d, A, b, c, Xin(0), "eaa127fa", 11
    110.         MD5F3 c, d, A, b, Xin(3), "d4ef3085", 16
    111.         MD5F3 b, c, d, A, Xin(6), "4881d05", 23
    112.         MD5F3 A, b, c, d, Xin(9), "d9d4d039", 4
    113.         MD5F3 d, A, b, c, Xin(12), "e6db99e5", 11
    114.         MD5F3 c, d, A, b, Xin(15), "1fa27cf8", 16
    115.         MD5F3 b, c, d, A, Xin(2), "c4ac5665", 23
    116.         
    117.         ' Round 4
    118.         MD5F4 A, b, c, d, Xin(0), "f4292244", 6
    119.         MD5F4 d, A, b, c, Xin(7), "432aff97", 10
    120.         MD5F4 c, d, A, b, Xin(14), "ab9423a7", 15
    121.         MD5F4 b, c, d, A, Xin(5), "fc93a039", 21
    122.         MD5F4 A, b, c, d, Xin(12), "655b59c3", 6
    123.         MD5F4 d, A, b, c, Xin(3), "8f0ccc92", 10
    124.         MD5F4 c, d, A, b, Xin(10), "ffeff47d", 15
    125.         MD5F4 b, c, d, A, Xin(1), "85845dd1", 21
    126.         MD5F4 A, b, c, d, Xin(8), "6fa87e4f", 6
    127.         MD5F4 d, A, b, c, Xin(15), "fe2ce6e0", 10
    128.         MD5F4 c, d, A, b, Xin(6), "a3014314", 15
    129.         MD5F4 b, c, d, A, Xin(13), "4e0811a1", 21
    130.         MD5F4 A, b, c, d, Xin(4), "f7537e82", 6
    131.         MD5F4 d, A, b, c, Xin(11), "bd3af235", 10
    132.         MD5F4 c, d, A, b, Xin(2), "2ad7d2bb", 15
    133.         MD5F4 b, c, d, A, Xin(9), "eb86d391", 21

    134.         buf(0) = BigAdd(buf(0), A)
    135.         buf(1) = BigAdd(buf(1), b)
    136.         buf(2) = BigAdd(buf(2), c)
    137.         buf(3) = BigAdd(buf(3), d)
    138.     Next loopouter

    139.     For loopit = 0 To 3
    140.         For loopinner = 3 To 0 Step -1
    141.             Text2.Text = Text2.Text & (Mid$(buf(loopit), 1 + 2 * loopinner, 2))
    142.             Next loopinner
    143.     Next loopit

    144. End Function

    145. Function BigMod32Add(ByVal value1 As String, ByVal value2 As String) As String
    146.     BigMod32Add = Right$(BigAdd(value1, value2), 8)
    147. End Function

    148. Public Function BigAdd(ByVal value1 As String, ByVal value2 As String) As String
    149. Dim valueans As String
    150. Dim loopit As Integer, tempnum As Integer

    151.     tempnum = Len(value1) - Len(value2)
    152.     If tempnum < 0 Then
    153.         value1 = Space$(Abs(tempnum)) + value1
    154.     ElseIf tempnum > 0 Then
    155.         value2 = Space$(Abs(tempnum)) + value2
    156.     End If

    157.     tempnum = 0
    158.     For loopit = Len(value1) To 1 Step -1
    159.         tempnum = tempnum + Val("&H" + Mid$(value1, loopit, 1)) + Val("&H" + Mid$(value2, loopit, 1))
    160.         valueans = Hex$(tempnum Mod 16) + valueans
    161.         tempnum = Int(tempnum / 16)
    162.     Next loopit

    163.     If tempnum <> 0 Then
    164.         valueans = Hex$(tempnum) + valueans
    165.     End If

    166.     BigAdd = Right(valueans, 8)
    167. End Function

    168. Public Function RotLeft(ByVal value1 As String, ByVal rots As Integer) As String
    169. Dim tempstr As String
    170. Dim loopit As Integer, loopinner As Integer
    171. Dim tempnum As Integer

    172.     rots = rots Mod 32
    173.    
    174.     If rots = 0 Then
    175.         RotLeft = value1
    176.         Exit Function
    177.     End If

    178.     value1 = Right$(value1, 8)
    179.     tempstr = String$(8 - Len(value1), "0") + value1
    180.     value1 = ""

    181.     ' 转换成二进制形式
    182.     For loopit = 1 To 8
    183.         tempnum = Val("&H" + Mid$(tempstr, loopit, 1))
    184.         For loopinner = 3 To 0 Step -1
    185.             If tempnum And 2 ^ loopinner Then
    186.                 value1 = value1 + "1"
    187.             Else
    188.                 value1 = value1 + "0"
    189.             End If
    190.         Next loopinner
    191.     Next loopit
    192.     tempstr = Mid$(value1, rots + 1) + Left$(value1, rots)

    193.     ' 转换为十六进制
    194.     value1 = ""
    195.     For loopit = 0 To 7
    196.         tempnum = 0
    197.         For loopinner = 0 To 3
    198.             If Val(Mid$(tempstr, 4 * loopit + loopinner + 1, 1)) Then

    199.                 tempnum = tempnum + 2 ^ (3 - loopinner)
    200.             End If
    201.         Next loopinner
    202.         value1 = value1 + Hex$(tempnum)
    203.     Next loopit

    204.     RotLeft = Right(value1, 8)
    205. End Function

    206. Function BigAND(ByVal value1 As String, ByVal value2 As String) As String
    207. Dim valueans As String
    208. Dim loopit As Integer, tempnum As Integer

    209.     tempnum = Len(value1) - Len(value2)
    210.     If tempnum < 0 Then
    211.         value2 = Mid$(value2, Abs(tempnum) + 1)
    212.     ElseIf tempnum > 0 Then
    213.         value1 = Mid$(value1, tempnum + 1)
    214.     End If

    215.     For loopit = 1 To Len(value1)
    216.         valueans = valueans + Hex$(Val("&H" + Mid$(value1, loopit, 1)) And Val("&H" + Mid$(value2, loopit, 1)))
    217.     Next loopit

    218.     BigAND = valueans
    219. End Function

    220. Function BigNOT(ByVal value1 As String) As String
    221. Dim valueans As String
    222. Dim loopit As Integer

    223.     value1 = Right$(value1, 8)
    224.     value1 = String$(8 - Len(value1), "0") + value1
    225.     For loopit = 1 To 8
    226.         valueans = valueans + Hex$(15 Xor Val("&H" + Mid$(value1, loopit, 1)))
    227.     Next loopit

    228.     BigNOT = valueans
    229. End Function

    230. Function BigOR(ByVal value1 As String, ByVal value2 As String) As String
    231. Dim valueans As String
    232. Dim loopit As Integer, tempnum As Integer

    233.     tempnum = Len(value1) - Len(value2)
    234.     If tempnum < 0 Then
    235.         valueans = Left$(value2, Abs(tempnum))
    236.         value2 = Mid$(value2, Abs(tempnum) + 1)
    237.     ElseIf tempnum > 0 Then
    238.         valueans = Left$(value1, Abs(tempnum))
    239.         value1 = Mid$(value1, tempnum + 1)
    240.     End If

    241.     For loopit = 1 To Len(value1)
    242.         valueans = valueans + Hex$(Val("&H" + Mid$(value1, loopit, 1)) Or Val("&H" + Mid$(value2, loopit, 1)))
    243.     Next loopit

    244.     BigOR = valueans
    245. End Function

    246. Function BigXOR(ByVal value1 As String, ByVal value2 As String) As String
    247. Dim valueans As String
    248. Dim loopit As Integer, tempnum As Integer

    249.     tempnum = Len(value1) - Len(value2)
    250.     If tempnum < 0 Then
    251.         valueans = Left$(value2, Abs(tempnum))
    252.         value2 = Mid$(value2, Abs(tempnum) + 1)
    253.     ElseIf tempnum > 0 Then
    254.         valueans = Left$(value1, Abs(tempnum))
    255.         value1 = Mid$(value1, tempnum + 1)
    256.     End If

    257.     For loopit = 1 To Len(value1)
    258.         valueans = valueans + Hex$(Val("&H" + Mid$(value1, loopit, 1)) Xor Val("&H" + Mid$(value2, loopit, 1)))
    259.     Next loopit

    260.     BigXOR = Right(valueans, 8)
    261. End Function


    262. Private Sub Command1_Click()
    263. MD5_Calc (Text1.Text)
    264. End Sub

    265. Private Sub Command2_Click()
    266. Text1.Text = ""
    267. Text2.Text = ""
    268. End Sub

    复制代码

    VB_MD5另一种算法.rar

    9.96 KB, 下载次数: 25, 下载积分: 飘云币 -2 枚

    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-8-18 19:32:44 | 显示全部楼层
    支持一下。。。。。。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-5-19 15:02:09 | 显示全部楼层
    说一下具体怎么用
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2011-11-17 22:09:30 | 显示全部楼层
    谢谢收藏了
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表