How to implement MD5 encryption algorithm by VBS
This article mainly introduces VBS how to achieve MD5 encryption algorithm, has a certain reference value, interested friends can refer to, I hope you can learn a lot after reading this article, the following let Xiaobian take you to understand.
The code is 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 (10) = CLng (2047)
M_lOnBits (11) = CLng (4095)
M_lOnBits (12) = CLng (8191)
M_lOnBits (13) = CLng (16383)
M_lOnBits (14) = CLng (32767)
M_lOnBits (15) = CLng (65535)
M_lOnBits (16) = CLng (131071)
M_lOnBits (17) = CLng (262143)
M_lOnBits (18) = CLng (524287)
M_lOnBits (19) = CLng (1048575)
M_lOnBits (20) = CLng (2097151)
M_lOnBits (21) = CLng (4194303)
M_lOnBits (22) = CLng (8388607)
M_lOnBits (23) = CLng (16777215)
M_lOnBits (24) = CLng (33554431)
M_lOnBits (25) = CLng (67108863)
M_lOnBits (26) = CLng (134217727)
M_lOnBits (27) = CLng (268435455)
M_lOnBits (28) = CLng (536870911)
M_lOnBits (29) = CLng (1073741823)
M_lOnBits (30) = 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
M_l2Power (9) = CLng
M_l2Power (10) = CLng (1024)
M_l2Power (11) = CLng (2048)
M_l2Power (12) = CLng (4096)
M_l2Power (13) = CLng (8192)
M_l2Power (14) = CLng (16384)
M_l2Power (15) = CLng (32768)
M_l2Power (16) = CLng (65536)
M_l2Power (17) = CLng (131072)
M_l2Power (18) = CLng (262144)
M_l2Power (19) = CLng (524288)
M_l2Power (20) = CLng (1048576)
M_l2Power (21) = CLng (2097152)
M_l2Power (22) = CLng (4194304)
M_l2Power (23) = CLng (8388608)
M_l2Power (24) = CLng (16777216)
M_l2Power (25) = CLng (33554432)
M_l2Power (26) = CLng (67108864)
M_l2Power (27) = CLng (134217728)
M_l2Power (28) = CLng (268435456)
M_l2Power (29) = CLng (536870912)
M_l2Power (30) = 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 = 31 Then
If lValue And 1 Then
LShift = & H80000000
Else
LShift = 0
End If
Exit Function
ElseIf iShiftBits
< 0 Or iShiftBits >31 Then
Err.Raise 6
End If
If (lValue And m_l2Power (31-iShiftBits)) Then
LShift = ((lValue And m_lOnBits (31-(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 = 31 Then
If lValue And & H80000000 Then
RShift = 1
Else
RShift = 0
End If
Exit Function
ElseIf iShiftBits
< 0 Or iShiftBits >31 Then
Err.Raise 6
End If
RShift = (lValue And & H7FFFFFFE)\ m_l2Power (iShiftBits)
If (lValue And & H80000000) Then
RShift = (RShift Or (& H4000000\ 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 & H4000000
LY4 = lY And & H4000000
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 & H4000000 Then
LResult = lResult Xor & HC0000000 Xor lX8 Xor lY8
Else
LResult = lResult Xor & H4000000 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 + 10), S13, & HFFFF5BB1
FF b, c, d, a, x (k + 11), S14, & H895CD7BE
FF a, b, c, d, x (k + 12), S11, & H6B901122
FF d, a, b, c, x (k + 13), S12, & HFD987193
FF c, d, a, b, x (k + 14), S13, & HA679438E
FF b, c, d, a, x (k + 15), 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 + 11), 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 + 10), S22, & H2441453
GG c, d, a, b, x (k + 15), 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 + 14), 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 + 13), 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 + 12), 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 + 11), S33, & H6D9D6122
HH b, c, d, a, x (k + 14), 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 + 10), S34, & HBEBFBC70
HH a, b, c, d, x (k + 13), 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 + 12), S32, & HE6DB99E5
HH c, d, a, b, x (k + 15), 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 + 14), S43, & HAB9423A7
II b, c, d, a, x (k + 5), S44, & HFC93A039
II a, b, c, d, x (k + 12), S41, & H655B59C3
II d, a, b, c, x (k + 3), S42, & H8F0CCC92
II c, d, a, b, x (k + 10), 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 + 15), S42, & HFE2CE6E0
II c, d, a, b, x (k + 6), S43, & HA3014314
II b, c, d, a, x (k + 13), S44, & H4E0811A1
II a, b, c, d, x (k + 4), S41, & HF7537E82
II d, a, b, c, x (k + 11), 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
Thank you for reading this article carefully. I hope the article "how to achieve MD5 encryption algorithm in VBS" shared by the editor will be helpful to everyone. At the same time, I also hope that you will support and pay attention to the industry information channel. More related knowledge is waiting for you to learn!