lMessageLength = LenB(sMessage)
lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) ASP_BITS_TO_A_BYTE)) (MODULUS_BITS ASP_BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS ASP_BITS_TO_A_WORD)
ReDim lWordArray(lNumberOfWords - 1)
lBytePosition = 0
lByteCount = 0
Do Until lByteCount >= lMessageLength
lWordCount = lByteCount ASP_BYTES_TO_A_WORD
lBytePosition = (lByteCount Mod ASP_BYTES_TO_A_WORD) * ASP_BITS_TO_A_BYTE
lWordArray(lWordCount) = lWordArray(lWordCount) Or ASP_LShift(AscB(MidB(sMessage, lByteCount + 1, 1)), lBytePosition)
lByteCount = lByteCount + 1
Loop
lWordCount = lByteCount ASP_BYTES_TO_A_WORD
lBytePosition = (lByteCount Mod ASP_BYTES_TO_A_WORD) * ASP_BITS_TO_A_BYTE
lWordArray(lWordCount) = lWordArray(lWordCount) Or ASP_LShift(&H80, lBytePosition)
lWordArray(lNumberOfWords - 2) = ASP_LShift(lMessageLength, 3)
lWordArray(lNumberOfWords - 1) = ASP_RShift(lMessageLength, 29)
ASP_ConvertToWordArray = lWordArray
End Function
Private Function ASP_WordToHex(lValue)
Dim lByte
Dim lCount
For lCount = 0 To 3
lByte = ASP_RShift(lValue, lCount * ASP_BITS_TO_A_BYTE) And ASP_m_lOnBits(ASP_BITS_TO_A_BYTE - 1)
ASP_WordToHex = ASP_WordToHex & Right("0" & Hex(lByte), 2)
Next
End Function
Public Function ASP_MD5(sMessage)
ASP_m_lOnBits(0) = CLng(1)
ASP_m_lOnBits(1) = CLng(3)
ASP_m_lOnBits(2) = CLng(7)
ASP_m_lOnBits(3) = CLng(15)
ASP_m_lOnBits(4) = CLng(31)
ASP_m_lOnBits(5) = CLng(63)
ASP_m_lOnBits(6) = CLng(127)
ASP_m_lOnBits(7) = CLng(255)
ASP_m_lOnBits(8) = CLng(511)
ASP_m_lOnBits(9) = CLng(1023)
ASP_m_lOnBits(10) = CLng(2047)
ASP_m_lOnBits(11) = CLng(4095)
ASP_m_lOnBits(12) = CLng(8191)
ASP_m_lOnBits(13) = CLng(16383)
ASP_m_lOnBits(14) = CLng(32767)
ASP_m_lOnBits(15) = CLng(65535)
ASP_m_lOnBits(16) = CLng(131071)
ASP_m_lOnBits(17) = CLng(262143)
ASP_m_lOnBits(18) = CLng(524287)
ASP_m_lOnBits(19) = CLng(1048575)
ASP_m_lOnBits(20) = CLng(2097151)
ASP_m_lOnBits(21) = CLng(4194303)
ASP_m_lOnBits(22) = CLng(8388607)
ASP_m_lOnBits(23) = CLng(16777215)
ASP_m_lOnBits(24) = CLng(33554431)
ASP_m_lOnBits(25) = CLng(67108863)
ASP_m_lOnBits(26) = CLng(134217727)
ASP_m_lOnBits(27) = CLng(268435455)
ASP_m_lOnBits(28) = CLng(536870911)
ASP_m_lOnBits(29) = CLng(1073741823)
ASP_m_lOnBits(30) = CLng(2147483647)









