Copy Code code as follows:
Private Const Bits_to_a_byte = 8
Private Const Bytes_to_a_word = 4
Private Const Bits_to_a_word = 32
Private M_lonbits (30)
Private M_l2power (30)
M_lonbits (0) = CLng (1)
M_lonbits (1) = CLng (3)
M_lonbits (2) = CLng (7)
M_lonbits (3) = CLng (15)
M_lonbits (4) = CLng (31)
M_lonbits (5) = CLng (63)
M_lonbits (6) = CLng (127)
M_lonbits (7) = CLng (255)
M_lonbits (8) = CLng (511)
M_lonbits (9) = CLng (1023)
M_lonbits (+) = CLng (2047)
M_lonbits (one) = CLng (4095)
M_lonbits (a) = CLng (8191)
M_lonbits (+) = CLng (16383)
M_lonbits (+) = CLng (32767)
M_lonbits (+) = CLng (65535)
M_lonbits (+) = CLng (131071)
M_lonbits (+) = CLng (262143)
M_lonbits (km) = CLng (524287)
M_lonbits (a) = CLng (1048575)
M_lonbits (+) = CLng (2097151)
M_lonbits = CLng (4194303)
M_lonbits (+) = CLng (8388607)
M_lonbits (+) = CLng (16777215)
M_lonbits (+) = CLng (33554431)
M_lonbits (+) = CLng (67108863)
M_lonbits (num) = CLng (134217727)
M_lonbits (+) = CLng (268435455)
M_lonbits = CLng (536870911)
M_lonbits (+) = CLng (1073741823)
M_lonbits (+) = CLng (2147483647)
M_l2power (0) = CLng (1)
M_l2power (1) = CLng (2)
M_l2power (2) = CLng (4)
M_l2power (3) = CLng (8)
M_l2power (4) = CLng (16)
M_l2power (5) = CLng (32)
M_l2power (6) = CLng (64)
M_l2power (7) = CLng (128)
M_l2power (8) = CLng (256)
M_l2power (9) = CLng (512)
M_l2power (+) = CLng (1024)
M_l2power (one) = CLng (2048)
M_l2power (a) = CLng (4096)
M_l2power (+) = CLng (8192)
M_l2power (+) = CLng (16384)
M_l2power (+) = CLng (32768)
M_l2power (+) = CLng (65536)
M_l2power (+) = CLng (131072)
M_l2power (km) = CLng (262144)
M_l2power (a) = CLng (524288)
M_l2power (+) = CLng (1048576)
M_l2power = CLng (2097152)
M_l2power (+) = CLng (4194304)
M_l2power (+) = CLng (8388608)
M_l2power (+) = CLng (16777216)
M_l2power (+) = CLng (33554432)
M_l2power (num) = CLng (67108864)
M_l2power (+) = CLng (134217728)
M_l2power = CLng (268435456)
M_l2power (+) = CLng (536870912)
M_l2power (+) = CLng (1073741824)
A=inputbox ("Please enter password:")
WScript.Echo MD5 (a)
Private Function LShift (LValue, Ishiftbits)
If ishiftbits = 0 Then
LShift = LValue
Exit Function
ElseIf ishiftbits = Then
If LValue and 1 Then
LShift = &h80000000
Else
LShift = 0
End If
Exit Function
ElseIf ishiftbits < 0 Or ishiftbits > Then
Err.Raise 6
End If
If (LValue and M_l2power (31-ishiftbits)) Then
LShift = ((LValue and M_lonbits ()-(ishiftbits + 1)) * M_l2power (ishiftbits)) Or &h80000000
Else
LShift = ((LValue and M_lonbits (31-ishiftbits)) * M_l2power (ishiftbits))
End If
End Function
Private Function rshift (LValue, Ishiftbits)
If ishiftbits = 0 Then
Rshift = LValue
Exit Function
ElseIf ishiftbits = Then
If LValue and &h80000000 Then
Rshift = 1
Else
Rshift = 0
End If
Exit Function
ElseIf ishiftbits < 0 Or ishiftbits > Then
Err.Raise 6
End If
Rshift = (lValue and &h7ffffffe) \ M_l2power (ishiftbits)
If (LValue and &h80000000) Then
Rshift = (rshift Or (&h40000000 \ m_l2power (iShiftBits-1))
End If
End Function
Private Function rotateleft (LValue, Ishiftbits)
Rotateleft = LShift (LValue, ishiftbits) Or Rshift (LValue, (32-ishiftbits))
End Function
Private Function addunsigned (LX, LY)
Dim lX4
Dim lY4
Dim lX8
Dim lY8
Dim Lresult
LX8 = LX and &h80000000
LY8 = LY and &h80000000
LX4 = LX and &h40000000
LY4 = LY and &h40000000
LRESULT = (LX and &H3FFFFFFF) + (LY and &H3FFFFFFF)
If lX4 and LY4 Then
LRESULT = Lresult xor &h80000000 xor LX8 xor lY8
ElseIf lX4 Or lY4 Then
If Lresult and &h40000000 Then
LRESULT = Lresult xor &hc0000000 xor LX8 xor lY8
Else
LRESULT = Lresult xor &h40000000 xor LX8 xor lY8
End If
Else
LRESULT = Lresult XOR lX8 xor lY8
End If
addunsigned = Lresult
End Function
Private Function F (x, Y, z)
F = (x and y) Or (not x) and Z)
End Function
Private Function G (x, Y, z)
G = (x and z) Or (y and not z)
End Function
Private Function H (x, Y, z)
H = (x xor y xor Z)
End Function
Private Function I (x, Y, z)
I = (y Xor (x Or not z))
End Function
Private Sub FF (A, B, C, D, X, S, AC)
A = addunsigned (A, addunsigned (addunsigned (F (b, C, D), x), AC)
A = Rotateleft (A, s)
A = Addunsigned (A, B)
End Sub
Private Sub GG (A, B, C, D, X, S, AC)
A = addunsigned (A, addunsigned (addunsigned (G (b, C, D), x), AC)
A = Rotateleft (A, s)
A = Addunsigned (A, B)
End Sub
Private Sub HH (A, B, C, D, X, S, AC)
A = addunsigned (A, addunsigned (addunsigned (H (b, C, D), x), AC)
A = Rotateleft (A, s)
A = Addunsigned (A, B)
End Sub
Private Sub II (A, B, C, D, X, S, AC)
A = addunsigned (A, addunsigned (addunsigned (I (b, C, D), x), AC)
A = Rotateleft (A, s)
A = Addunsigned (A, B)
End Sub
Private Function Converttowordarray (smessage)
Dim Lmessagelength
Dim Lnumberofwords
Dim Lwordarray ()
Dim lbyteposition
Dim Lbytecount
Dim Lwordcount
Const modulus_bits = 512
Const congruent_bits = 448
Lmessagelength = Len (smessage)
Lnumberofwords = ((Lmessagelength + ((modulus_bits-congruent_bits) \ Bits_to_a_byte)) \ (modulus_bits \ BITS_TO_A_BYTE) ) + 1) * (modulus_bits \ Bits_to_a_word)
ReDim Lwordarray (lNumberOfWords-1)
lbyteposition = 0
Lbytecount = 0
Do Until lbytecount >= lmessagelength
Lwordcount = lbytecount \ Bytes_to_a_word
Lbyteposition = (Lbytecount Mod bytes_to_a_word) * Bits_to_a_byte
Lwordarray (Lwordcount) = Lwordarray (Lwordcount) Or LShift (ASC (Mid smessage, Lbytecount + 1, 1), lbyteposition)
Lbytecount = Lbytecount + 1
Loop
Lwordcount = lbytecount \ Bytes_to_a_word
Lbyteposition = (Lbytecount Mod bytes_to_a_word) * Bits_to_a_byte
Lwordarray (Lwordcount) = Lwordarray (Lwordcount) Or lshift (&h80, lbyteposition)
Lwordarray (lNumberOfWords-2) = LShift (Lmessagelength, 3)
Lwordarray (lNumberOfWords-1) = Rshift (lmessagelength, 29)
Converttowordarray = Lwordarray
End Function
Private Function Wordtohex (lValue)
Dim Lbyte
Dim Lcount
For lcount = 0 to 3
Lbyte = Rshift (LValue, Lcount * bits_to_a_byte) and m_lonbits (bits_to_a_byte-1)
Wordtohex = Wordtohex & Right ("0" & Hex (Lbyte), 2)
Next
End Function
Public Function MD5 (smessage)
Dim x
Dim K
Dim AA
Dim BB
Dim CC
Dim DD
Dim A
Dim b
Dim C
Dim D
Const S11 = 7
Const S12 = 12
Const S13 = 17
Const S14 = 22
Const S21 = 5
Const S22 = 9
Const S23 = 14
Const S24 = 20
Const S31 = 4
Const S32 = 11
Const S33 = 16
Const S34 = 23
Const S41 = 6
Const S42 = 10
Const S43 = 15
Const S44 = 21
x = Converttowordarray (smessage)
A = &h67452301
b = &hefcdab89
c = &h98badcfe
D = &h10325476
For k = 0 to UBound (x) Step 16
AA = A
BB = b
CC = C
DD = d
FF A, B, C, D, X (k + 0), S11, &hd76aa478
FF D, A, B, C, x (k + 1), S12, &he8c7b756
FF C, D, a, B, X (k + 2), S13, &h242070db
FF B, C, D, A, X (K + 3), S14, &hc1bdceee
FF A, B, C, D, X (K + 4), S11, &HF57C0FAF
FF D, A, B, C, X (K + 5), S12, &h4787c62a
FF C, D, a, B, X (k + 6), S13, &ha8304613
FF B, C, D, A, X (k + 7), S14, &hfd469501
FF A, B, C, D, X (K + 8), S11, &h698098d8
FF D, A, B, C, X (K + 9), S12, &H8B44F7AF
FF C, D, a, B, X (k +), S13, &HFFFF5BB1
FF B, C, D, A, X (k + one), S14, &h895cd7be
FF A, B, C, D, X (K +), S11, &h6b901122
FF D, A, B, C, X (K +), S12, &hfd987193
FF C, D, a, B, X (k +), S13, &ha679438e
FF B, C, D, A, X (k +), S14, &h49b40821
GG A, B, C, D, X (k + 1), S21, &hf61e2562
GG D, A, B, C, X (K + 6), S22, &hc040b340
GG C, D, a, B, X (k + one), S23, &h265e5a51
GG B, C, D, A, X (k + 0), S24, &HE9B6C7AA
GG A, B, C, D, X (K + 5), S21, &hd62f105d
GG D, A, B, C, X (K +), S22, &h2441453
GG C, D, a, B, X (k +), S23, &hd8a1e681
GG B, C, D, A, X (K + 4), S24, &he7d3fbc8
GG A, B, C, D, X (K + 9), S21, &h21e1cde6
GG D, A, B, C, X (K +), S22, &hc33707d6
GG C, D, a, B, X (k + 3), S23, &hf4d50d87
GG B, C, D, A, X (K + 8), S24, &h455a14ed
GG A, B, C, D, X (K +), S21, &ha9e3e905
GG D, A, B, C, X (K + 2), S22, &hfcefa3f8
GG C, D, a, B, X (k + 7), S23, &h676f02d9
GG B, C, D, A, X (k +), S24, &h8d2a4c8a
HH A, B, C, D, X (K + 5), S31, &hfffa3942
HH D, A, B, C, X (K + 8), S32, &h8771f681
HH C, D, a, B, X (k + one), S33, &h6d9d6122
HH B, C, D, A, X (k +), S34, &hfde5380c
HH A, B, C, D, X (k + 1), S31, &ha4beea44
HH D, A, B, C, X (K + 4), S32, &h4bdecfa9
HH C, D, a, B, X (k + 7), S33, &hf6bb4b60
HH B, C, D, A, X (k +), S34, &hbebfbc70
HH A, B, C, D, X (K +), S31, &H289B7EC6
HH D, A, B, C, x (k + 0), S32, &HEAA127FA
HH C, D, a, B, X (k + 3), S33, &hd4ef3085
HH B, C, D, A, X (k + 6), S34, &h4881d05
HH A, B, C, D, X (K + 9), S31, &hd9d4d039
HH D, A, B, C, X (K +), S32, &he6db99e5
HH C, D, a, B, X (k +), S33, &h1fa27cf8
HH B, C, D, A, X (K + 2), S34, &hc4ac5665
II A, B, C, D, X (k + 0), S41, &hf4292244
II D, A, B, C, X (k + 7), S42, &h432aff97
II C, D, a, B, X (k +), S43, &hab9423a7
II B, C, D, A, X (K + 5), S44, &hfc93a039
II A, B, C, D, X (K +), S41, &H655B59C3
II D, A, B, C, X (K + 3), S42, &h8f0ccc92
II C, D, a, B, X (k +), S43, &hffeff47d
II B, C, D, A, X (k + 1), S44, &H85845DD1
II A, B, C, D, X (K + 8), S41, &h6fa87e4f
II D, A, B, C, X (K +), S42, &HFE2CE6E0
II C, D, a, B, X (k + 6), S43, &ha3014314
II B, C, D, A, X (k +), S44, &H4E0811A1
II A, B, C, D, X (K + 4), S41, &hf7537e82
II D, A, B, C, X (K + one), S42, &hbd3af235
II C, D, a, B, X (k + 2), S43, &H2AD7D2BB
II B, C, D, A, X (k + 9), S44, &heb86d391
A = addunsigned (A, AA)
b = addunsigned (b, BB)
c = addunsigned (c, CC)
D = addunsigned (d, DD)
Next
MD5 = LCase (Wordtohex (a) & Wordtohex (b) & Wordtohex (c) & Wordtohex (d))
End Function