home *** CD-ROM | disk | FTP | other *** search
/ 221.214.14.186 / 221.214.14.186.tar / 221.214.14.186 / wh / qim / Ft_md5.asp < prev    next >
Text File  |  2006-06-01  |  18KB  |  556 lines

  1. <%
  2. '==================================
  3. '=╬─ ╝■ ├√ú║Ft_md5.asp
  4. '=╩╩╙├░µ▒╛ú║FeitecCMS AC V1.3 Free
  5. '=╣ª    ─▄ú║MD5╬─╝■ú¿╥╤╫≈╨▐╕─ú¼╙δ╞╒═¿MD5╬─╝■╝╙├▄╖╜╩╜▓╗═¼ú¼▓╗─▄═¿╙├ú⌐
  6. '=╫≈    ╒▀ú║╙Ω│╟[From to FeitecStudio]
  7. '=╚╒    ╞┌ú║2005-7-4 20:59
  8. '=░µ    ╚¿ú║http://www.feitec.com/
  9. '=╝╝╩⌡╠╓┬█ú║6602510íó14040543ú¿╨┬╩╓╚║ú⌐
  10. '==================================
  11. %>
  12. <%
  13. Private Const BITS_TO_A_BYTE = 8
  14. Private Const BYTES_TO_A_WORD = 4
  15. Private Const BITS_TO_A_WORD = 32
  16.  
  17. Private m_lOnBits(30)
  18. Private m_l2Power(30)
  19.  
  20. Private Function LShift(lValue, iShiftBits)
  21.     If iShiftBits = 0 Then
  22.         LShift = lValue
  23.         Exit Function
  24.     ElseIf iShiftBits = 31 Then
  25.         If lValue And 1 Then
  26.             LShift = &H80000000
  27.         Else
  28.             LShift = 0
  29.         End If
  30.         Exit Function
  31.     ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
  32.         Err.Raise 6
  33.     End If
  34.  
  35.     If (lValue And m_l2Power(31 - iShiftBits)) Then
  36.         LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000
  37.     Else
  38.         LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits))
  39.     End If
  40. End Function
  41.  
  42. Private Function RShift(lValue, iShiftBits)
  43.     If iShiftBits = 0 Then
  44.         RShift = lValue
  45.         Exit Function
  46.     ElseIf iShiftBits = 31 Then
  47.         If lValue And &H80000000 Then
  48.             RShift = 1
  49.         Else
  50.             RShift = 0
  51.         End If
  52.         Exit Function
  53.     ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
  54.         Err.Raise 6
  55.     End If
  56.     
  57.     RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits)
  58.  
  59.     If (lValue And &H80000000) Then
  60.         RShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1)))
  61.     End If
  62. End Function
  63.  
  64. Private Function RotateLeft(lValue, iShiftBits)
  65.     RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits))
  66. End Function
  67.  
  68. Private Function AddUnsigned(lX, lY)
  69.     Dim lX4
  70.     Dim lY4
  71.     Dim lX8
  72.     Dim lY8
  73.     Dim lResult
  74.  
  75.     lX8 = lX And &H80000000
  76.     lY8 = lY And &H80000000
  77.     lX4 = lX And &H40000000
  78.     lY4 = lY And &H40000000
  79.  
  80.     lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF)
  81.  
  82.     If lX4 And lY4 Then
  83.         lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
  84.     ElseIf lX4 Or lY4 Then
  85.         If lResult And &H40000000 Then
  86.             lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8
  87.         Else
  88.             lResult = lResult Xor &H40000000 Xor lX8 Xor lY8
  89.         End If
  90.     Else
  91.         lResult = lResult Xor lX8 Xor lY8
  92.     End If
  93.  
  94.     AddUnsigned = lResult
  95. End Function
  96.  
  97. Private Function md5_F(x, y, z)
  98.     md5_F = (x And y) Or ((Not x) And z)
  99. End Function
  100.  
  101. Private Function md5_G(x, y, z)
  102.     md5_G = (x And z) Or (y And (Not z))
  103. End Function
  104.  
  105. Private Function md5_H(x, y, z)
  106.     md5_H = (x Xor y Xor z)
  107. End Function
  108.  
  109. Private Function md5_I(x, y, z)
  110.     md5_I = (y Xor (x Or (Not z)))
  111. End Function
  112.  
  113. Private Sub md5_FF(a, b, c, d, x, s, ac)
  114.     a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac))
  115.     a = RotateLeft(a, s)
  116.     a = AddUnsigned(a, b)
  117. End Sub
  118.  
  119. Private Sub md5_GG(a, b, c, d, x, s, ac)
  120.     a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac))
  121.     a = RotateLeft(a, s)
  122.     a = AddUnsigned(a, b)
  123. End Sub
  124.  
  125. Private Sub md5_HH(a, b, c, d, x, s, ac)
  126.     a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_H(b, c, d), x), ac))
  127.     a = RotateLeft(a, s)
  128.     a = AddUnsigned(a, b)
  129. End Sub
  130.  
  131. Private Sub md5_II(a, b, c, d, x, s, ac)
  132.     a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_I(b, c, d), x), ac))
  133.     a = RotateLeft(a, s)
  134.     a = AddUnsigned(a, b)
  135. End Sub
  136.  
  137. Private Function ConvertToWordArray(sMessage)
  138.     Dim lMessageLength
  139.     Dim lNumberOfWords
  140.     Dim lWordArray()
  141.     Dim lBytePosition
  142.     Dim lByteCount
  143.     Dim lWordCount
  144.     
  145.     Const MODULUS_BITS = 512
  146.     Const CONGRUENT_BITS = 448
  147.     
  148.     lMessageLength = Len(sMessage)
  149.     
  150.     lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD)
  151.     ReDim lWordArray(lNumberOfWords - 1)
  152.     
  153.     lBytePosition = 0
  154.     lByteCount = 0
  155.     Do Until lByteCount >= lMessageLength
  156.         lWordCount = lByteCount \ BYTES_TO_A_WORD
  157.         lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
  158.         lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)
  159.         lByteCount = lByteCount + 1
  160.     Loop
  161.  
  162.     lWordCount = lByteCount \ BYTES_TO_A_WORD
  163.     lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
  164.  
  165.     lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition)
  166.  
  167.     lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3)
  168.     lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29)
  169.     
  170.     ConvertToWordArray = lWordArray
  171. End Function
  172.  
  173. Private Function WordToHex(lValue)
  174.     Dim lByte
  175.     Dim lCount
  176.     
  177.     For lCount = 0 To 3
  178.         lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1)
  179.         WordToHex = WordToHex & Right("0" & Hex(lByte), 2)
  180.     Next
  181. End Function
  182.  
  183. Public Function Ft_MD5(sMessage)
  184.     m_lOnBits(0) = CLng(1)
  185.     m_lOnBits(1) = CLng(3)
  186.     m_lOnBits(2) = CLng(7)
  187.     m_lOnBits(3) = CLng(15)
  188.     m_lOnBits(4) = CLng(31)
  189.     m_lOnBits(5) = CLng(63)
  190.     m_lOnBits(6) = CLng(127)
  191.     m_lOnBits(7) = CLng(255)
  192.     m_lOnBits(8) = CLng(511)
  193.     m_lOnBits(9) = CLng(1023)
  194.     m_lOnBits(10) = CLng(2047)
  195.     m_lOnBits(11) = CLng(4095)
  196.     m_lOnBits(12) = CLng(8191)
  197.     m_lOnBits(13) = CLng(16383)
  198.     m_lOnBits(14) = CLng(32767)
  199.     m_lOnBits(15) = CLng(65535)
  200.     m_lOnBits(16) = CLng(131071)
  201.     m_lOnBits(17) = CLng(262143)
  202.     m_lOnBits(18) = CLng(524287)
  203.     m_lOnBits(19) = CLng(1048575)
  204.     m_lOnBits(20) = CLng(2097151)
  205.     m_lOnBits(21) = CLng(4194303)
  206.     m_lOnBits(22) = CLng(8388607)
  207.     m_lOnBits(23) = CLng(16777215)
  208.     m_lOnBits(24) = CLng(33554431)
  209.     m_lOnBits(25) = CLng(67108863)
  210.     m_lOnBits(26) = CLng(134217727)
  211.     m_lOnBits(27) = CLng(268435455)
  212.     m_lOnBits(28) = CLng(536870911)
  213.     m_lOnBits(29) = CLng(1073741823)
  214.     m_lOnBits(30) = CLng(2147483647)
  215.     
  216.     m_l2Power(0) = CLng(1)
  217.     m_l2Power(1) = CLng(2)
  218.     m_l2Power(2) = CLng(4)
  219.     m_l2Power(3) = CLng(8)
  220.     m_l2Power(4) = CLng(16)
  221.     m_l2Power(5) = CLng(32)
  222.     m_l2Power(6) = CLng(64)
  223.     m_l2Power(7) = CLng(128)
  224.     m_l2Power(8) = CLng(256)
  225.     m_l2Power(9) = CLng(512)
  226.     m_l2Power(10) = CLng(1024)
  227.     m_l2Power(11) = CLng(2048)
  228.     m_l2Power(12) = CLng(4096)
  229.     m_l2Power(13) = CLng(8192)
  230.     m_l2Power(14) = CLng(16384)
  231.     m_l2Power(15) = CLng(32768)
  232.     m_l2Power(16) = CLng(65536)
  233.     m_l2Power(17) = CLng(131072)
  234.     m_l2Power(18) = CLng(262144)
  235.     m_l2Power(19) = CLng(524288)
  236.     m_l2Power(20) = CLng(1048576)
  237.     m_l2Power(21) = CLng(2097152)
  238.     m_l2Power(22) = CLng(4194304)
  239.     m_l2Power(23) = CLng(8388608)
  240.     m_l2Power(24) = CLng(16777216)
  241.     m_l2Power(25) = CLng(33554432)
  242.     m_l2Power(26) = CLng(67108864)
  243.     m_l2Power(27) = CLng(134217728)
  244.     m_l2Power(28) = CLng(268435456)
  245.     m_l2Power(29) = CLng(536870912)
  246.     m_l2Power(30) = CLng(1073741824)
  247.  
  248.  
  249.     Dim x
  250.     Dim k
  251.     Dim AA
  252.     Dim BB
  253.     Dim CC
  254.     Dim DD
  255.     Dim a
  256.     Dim b
  257.     Dim c
  258.     Dim d
  259.     
  260.     Const S11 = 7
  261.     Const S12 = 12
  262.     Const S13 = 17
  263.     Const S14 = 22
  264.     Const S21 = 5
  265.     Const S22 = 9
  266.     Const S23 = 14
  267.     Const S24 = 20
  268.     Const S31 = 4
  269.     Const S32 = 11
  270.     Const S33 = 16
  271.     Const S34 = 23
  272.     Const S41 = 6
  273.     Const S42 = 10
  274.     Const S43 = 15
  275.     Const S44 = 21
  276.  
  277.     x = ConvertToWordArray(sMessage)
  278.     
  279.     a = &H67452301
  280.     b = &HEFCDAB89
  281.     c = &H98BADCFE
  282.     d = &H10325476
  283.  
  284.     For k = 0 To UBound(x) Step 16
  285.         AA = a
  286.         BB = b
  287.         CC = c
  288.         DD = d
  289.     
  290.         md5_FF a, b, c, d, x(k + 0), S11, &HD76AA478
  291.         md5_FF d, a, b, c, x(k + 1), S12, &HE8C7B756
  292.         md5_FF c, d, a, b, x(k + 2), S13, &H242070DB
  293.         md5_FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE
  294.         md5_FF a, b, c, d, x(k + 4), S11, &HF57C0FAF
  295.         md5_FF d, a, b, c, x(k + 5), S12, &H4787C62A
  296.         md5_FF c, d, a, b, x(k + 6), S13, &HA8304613
  297.         md5_FF b, c, d, a, x(k + 7), S14, &HFD469501
  298.         md5_FF a, b, c, d, x(k + 8), S11, &H698098D8
  299.         md5_FF d, a, b, c, x(k + 9), S12, &H8B44F7AF
  300.         md5_FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1
  301.         md5_FF b, c, d, a, x(k + 11), S14, &H895CD7BE
  302.         md5_FF a, b, c, d, x(k + 12), S11, &H6B901122
  303.         md5_FF d, a, b, c, x(k + 13), S12, &HFD987193
  304.         md5_FF c, d, a, b, x(k + 14), S13, &HA679438E
  305.         md5_FF b, c, d, a, x(k + 15), S14, &H49B40821
  306.     
  307.         md5_GG a, b, c, d, x(k + 1), S21, &HF61E2562
  308.         md5_GG d, a, b, c, x(k + 6), S22, &HC040B340
  309.         md5_GG c, d, a, b, x(k + 11), S23, &H265E5A51
  310.         md5_GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA
  311.         md5_GG a, b, c, d, x(k + 5), S21, &HD62F105D
  312.         md5_GG d, a, b, c, x(k + 10), S22, &H2441453
  313.         md5_GG c, d, a, b, x(k + 15), S23, &HD8A1E681
  314.         md5_GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8
  315.         md5_GG a, b, c, d, x(k + 9), S21, &H21E1CDE6
  316.         md5_GG d, a, b, c, x(k + 14), S22, &HC33707D6
  317.         md5_GG c, d, a, b, x(k + 3), S23, &HF4D50D87
  318.         md5_GG b, c, d, a, x(k + 8), S24, &H455A14ED
  319.         md5_GG a, b, c, d, x(k + 13), S21, &HA9E3E905
  320.         md5_GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8
  321.         md5_GG c, d, a, b, x(k + 7), S23, &H676F02D9
  322.         md5_GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A
  323.             
  324.         md5_HH a, b, c, d, x(k + 5), S31, &HFFFA3942
  325.         md5_HH d, a, b, c, x(k + 8), S32, &H8771F681
  326.         md5_HH c, d, a, b, x(k + 11), S33, &H6D9D6122
  327.         md5_HH b, c, d, a, x(k + 14), S34, &HFDE5380C
  328.         md5_HH a, b, c, d, x(k + 1), S31, &HA4BEEA44
  329.         md5_HH d, a, b, c, x(k + 4), S32, &H4BDECFA9
  330.         md5_HH c, d, a, b, x(k + 7), S33, &HF6BB4B60
  331.         md5_HH b, c, d, a, x(k + 10), S34, &HBEBFBC70
  332.         md5_HH a, b, c, d, x(k + 13), S31, &H289B7EC6
  333.         md5_HH d, a, b, c, x(k + 0), S32, &HEAA127FA
  334.         md5_HH c, d, a, b, x(k + 3), S33, &HD4EF3085
  335.         md5_HH b, c, d, a, x(k + 6), S34, &H4881D05
  336.         md5_HH a, b, c, d, x(k + 9), S31, &HD9D4D039
  337.         md5_HH d, a, b, c, x(k + 12), S32, &HE6DB99E5
  338.         md5_HH c, d, a, b, x(k + 15), S33, &H1FA27CF8
  339.         md5_HH b, c, d, a, x(k + 2), S34, &HC4AC5665
  340.     
  341.         md5_II a, b, c, d, x(k + 0), S41, &HF4292244
  342.         md5_II d, a, b, c, x(k + 7), S42, &H432AFF97
  343.         md5_II c, d, a, b, x(k + 14), S43, &HAB9423A7
  344.         md5_II b, c, d, a, x(k + 5), S44, &HFC93A039
  345.         md5_II a, b, c, d, x(k + 12), S41, &H655B59C3
  346.         md5_II d, a, b, c, x(k + 3), S42, &H8F0CCC92
  347.         md5_II c, d, a, b, x(k + 10), S43, &HFFEFF47D
  348.         md5_II b, c, d, a, x(k + 1), S44, &H85845DD1
  349.         md5_II a, b, c, d, x(k + 8), S41, &H6FA87E4F
  350.         md5_II d, a, b, c, x(k + 15), S42, &HFE2CE6E0
  351.         md5_II c, d, a, b, x(k + 6), S43, &HA3014314
  352.         md5_II b, c, d, a, x(k + 13), S44, &H4E0811A1
  353.         md5_II a, b, c, d, x(k + 4), S41, &HF7537E82
  354.         md5_II d, a, b, c, x(k + 11), S42, &HBD3AF235
  355.         md5_II c, d, a, b, x(k + 2), S43, &H2AD7D2BB
  356.         md5_II b, c, d, a, x(k + 9), S44, &HEB86D391
  357.     
  358.         a = AddUnsigned(a, AA)
  359.         b = AddUnsigned(b, BB)
  360.         c = AddUnsigned(c, CC)
  361.         d = AddUnsigned(d, DD)
  362.     Next
  363.     '┤╦┤ª╥╤╜°╨╨╕ⁿ╗╗┤ª└φ
  364.     Ft_MD5 = LCase(WordToHex(b) & WordToHex(d) & WordToHex(a) & WordToHex(c))
  365.     'MD5=LCase(WordToHex(b) & WordToHex(c))  
  366. End Function
  367.  
  368. Public Function Dvbbs_MD5(sMessage,stype)
  369.     m_lOnBits(0) = CLng(1)
  370.     m_lOnBits(1) = CLng(3)
  371.     m_lOnBits(2) = CLng(7)
  372.     m_lOnBits(3) = CLng(15)
  373.     m_lOnBits(4) = CLng(31)
  374.     m_lOnBits(5) = CLng(63)
  375.     m_lOnBits(6) = CLng(127)
  376.     m_lOnBits(7) = CLng(255)
  377.     m_lOnBits(8) = CLng(511)
  378.     m_lOnBits(9) = CLng(1023)
  379.     m_lOnBits(10) = CLng(2047)
  380.     m_lOnBits(11) = CLng(4095)
  381.     m_lOnBits(12) = CLng(8191)
  382.     m_lOnBits(13) = CLng(16383)
  383.     m_lOnBits(14) = CLng(32767)
  384.     m_lOnBits(15) = CLng(65535)
  385.     m_lOnBits(16) = CLng(131071)
  386.     m_lOnBits(17) = CLng(262143)
  387.     m_lOnBits(18) = CLng(524287)
  388.     m_lOnBits(19) = CLng(1048575)
  389.     m_lOnBits(20) = CLng(2097151)
  390.     m_lOnBits(21) = CLng(4194303)
  391.     m_lOnBits(22) = CLng(8388607)
  392.     m_lOnBits(23) = CLng(16777215)
  393.     m_lOnBits(24) = CLng(33554431)
  394.     m_lOnBits(25) = CLng(67108863)
  395.     m_lOnBits(26) = CLng(134217727)
  396.     m_lOnBits(27) = CLng(268435455)
  397.     m_lOnBits(28) = CLng(536870911)
  398.     m_lOnBits(29) = CLng(1073741823)
  399.     m_lOnBits(30) = CLng(2147483647)
  400.     
  401.     m_l2Power(0) = CLng(1)
  402.     m_l2Power(1) = CLng(2)
  403.     m_l2Power(2) = CLng(4)
  404.     m_l2Power(3) = CLng(8)
  405.     m_l2Power(4) = CLng(16)
  406.     m_l2Power(5) = CLng(32)
  407.     m_l2Power(6) = CLng(64)
  408.     m_l2Power(7) = CLng(128)
  409.     m_l2Power(8) = CLng(256)
  410.     m_l2Power(9) = CLng(512)
  411.     m_l2Power(10) = CLng(1024)
  412.     m_l2Power(11) = CLng(2048)
  413.     m_l2Power(12) = CLng(4096)
  414.     m_l2Power(13) = CLng(8192)
  415.     m_l2Power(14) = CLng(16384)
  416.     m_l2Power(15) = CLng(32768)
  417.     m_l2Power(16) = CLng(65536)
  418.     m_l2Power(17) = CLng(131072)
  419.     m_l2Power(18) = CLng(262144)
  420.     m_l2Power(19) = CLng(524288)
  421.     m_l2Power(20) = CLng(1048576)
  422.     m_l2Power(21) = CLng(2097152)
  423.     m_l2Power(22) = CLng(4194304)
  424.     m_l2Power(23) = CLng(8388608)
  425.     m_l2Power(24) = CLng(16777216)
  426.     m_l2Power(25) = CLng(33554432)
  427.     m_l2Power(26) = CLng(67108864)
  428.     m_l2Power(27) = CLng(134217728)
  429.     m_l2Power(28) = CLng(268435456)
  430.     m_l2Power(29) = CLng(536870912)
  431.     m_l2Power(30) = CLng(1073741824)
  432.  
  433.  
  434.     Dim x
  435.     Dim k
  436.     Dim AA
  437.     Dim BB
  438.     Dim CC
  439.     Dim DD
  440.     Dim a
  441.     Dim b
  442.     Dim c
  443.     Dim d
  444.     
  445.     Const S11 = 7
  446.     Const S12 = 12
  447.     Const S13 = 17
  448.     Const S14 = 22
  449.     Const S21 = 5
  450.     Const S22 = 9
  451.     Const S23 = 14
  452.     Const S24 = 20
  453.     Const S31 = 4
  454.     Const S32 = 11
  455.     Const S33 = 16
  456.     Const S34 = 23
  457.     Const S41 = 6
  458.     Const S42 = 10
  459.     Const S43 = 15
  460.     Const S44 = 21
  461.  
  462.     x = ConvertToWordArray(sMessage)
  463.     
  464.     a = &H67452301
  465.     b = &HEFCDAB89
  466.     c = &H98BADCFE
  467.     d = &H10325476
  468.  
  469.     For k = 0 To UBound(x) Step 16
  470.         AA = a
  471.         BB = b
  472.         CC = c
  473.         DD = d
  474.     
  475.         md5_FF a, b, c, d, x(k + 0), S11, &HD76AA478
  476.         md5_FF d, a, b, c, x(k + 1), S12, &HE8C7B756
  477.         md5_FF c, d, a, b, x(k + 2), S13, &H242070DB
  478.         md5_FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE
  479.         md5_FF a, b, c, d, x(k + 4), S11, &HF57C0FAF
  480.         md5_FF d, a, b, c, x(k + 5), S12, &H4787C62A
  481.         md5_FF c, d, a, b, x(k + 6), S13, &HA8304613
  482.         md5_FF b, c, d, a, x(k + 7), S14, &HFD469501
  483.         md5_FF a, b, c, d, x(k + 8), S11, &H698098D8
  484.         md5_FF d, a, b, c, x(k + 9), S12, &H8B44F7AF
  485.         md5_FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1
  486.         md5_FF b, c, d, a, x(k + 11), S14, &H895CD7BE
  487.         md5_FF a, b, c, d, x(k + 12), S11, &H6B901122
  488.         md5_FF d, a, b, c, x(k + 13), S12, &HFD987193
  489.         md5_FF c, d, a, b, x(k + 14), S13, &HA679438E
  490.         md5_FF b, c, d, a, x(k + 15), S14, &H49B40821
  491.     
  492.         md5_GG a, b, c, d, x(k + 1), S21, &HF61E2562
  493.         md5_GG d, a, b, c, x(k + 6), S22, &HC040B340
  494.         md5_GG c, d, a, b, x(k + 11), S23, &H265E5A51
  495.         md5_GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA
  496.         md5_GG a, b, c, d, x(k + 5), S21, &HD62F105D
  497.         md5_GG d, a, b, c, x(k + 10), S22, &H2441453
  498.         md5_GG c, d, a, b, x(k + 15), S23, &HD8A1E681
  499.         md5_GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8
  500.         md5_GG a, b, c, d, x(k + 9), S21, &H21E1CDE6
  501.         md5_GG d, a, b, c, x(k + 14), S22, &HC33707D6
  502.         md5_GG c, d, a, b, x(k + 3), S23, &HF4D50D87
  503.         md5_GG b, c, d, a, x(k + 8), S24, &H455A14ED
  504.         md5_GG a, b, c, d, x(k + 13), S21, &HA9E3E905
  505.         md5_GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8
  506.         md5_GG c, d, a, b, x(k + 7), S23, &H676F02D9
  507.         md5_GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A
  508.             
  509.         md5_HH a, b, c, d, x(k + 5), S31, &HFFFA3942
  510.         md5_HH d, a, b, c, x(k + 8), S32, &H8771F681
  511.         md5_HH c, d, a, b, x(k + 11), S33, &H6D9D6122
  512.         md5_HH b, c, d, a, x(k + 14), S34, &HFDE5380C
  513.         md5_HH a, b, c, d, x(k + 1), S31, &HA4BEEA44
  514.         md5_HH d, a, b, c, x(k + 4), S32, &H4BDECFA9
  515.         md5_HH c, d, a, b, x(k + 7), S33, &HF6BB4B60
  516.         md5_HH b, c, d, a, x(k + 10), S34, &HBEBFBC70
  517.         md5_HH a, b, c, d, x(k + 13), S31, &H289B7EC6
  518.         md5_HH d, a, b, c, x(k + 0), S32, &HEAA127FA
  519.         md5_HH c, d, a, b, x(k + 3), S33, &HD4EF3085
  520.         md5_HH b, c, d, a, x(k + 6), S34, &H4881D05
  521.         md5_HH a, b, c, d, x(k + 9), S31, &HD9D4D039
  522.         md5_HH d, a, b, c, x(k + 12), S32, &HE6DB99E5
  523.         md5_HH c, d, a, b, x(k + 15), S33, &H1FA27CF8
  524.         md5_HH b, c, d, a, x(k + 2), S34, &HC4AC5665
  525.     
  526.         md5_II a, b, c, d, x(k + 0), S41, &HF4292244
  527.         md5_II d, a, b, c, x(k + 7), S42, &H432AFF97
  528.         md5_II c, d, a, b, x(k + 14), S43, &HAB9423A7
  529.         md5_II b, c, d, a, x(k + 5), S44, &HFC93A039
  530.         md5_II a, b, c, d, x(k + 12), S41, &H655B59C3
  531.         md5_II d, a, b, c, x(k + 3), S42, &H8F0CCC92
  532.         md5_II c, d, a, b, x(k + 10), S43, &HFFEFF47D
  533.         md5_II b, c, d, a, x(k + 1), S44, &H85845DD1
  534.         md5_II a, b, c, d, x(k + 8), S41, &H6FA87E4F
  535.         md5_II d, a, b, c, x(k + 15), S42, &HFE2CE6E0
  536.         md5_II c, d, a, b, x(k + 6), S43, &HA3014314
  537.         md5_II b, c, d, a, x(k + 13), S44, &H4E0811A1
  538.         md5_II a, b, c, d, x(k + 4), S41, &HF7537E82
  539.         md5_II d, a, b, c, x(k + 11), S42, &HBD3AF235
  540.         md5_II c, d, a, b, x(k + 2), S43, &H2AD7D2BB
  541.         md5_II b, c, d, a, x(k + 9), S44, &HEB86D391
  542.     
  543.         a = AddUnsigned(a, AA)
  544.         b = AddUnsigned(b, BB)
  545.         c = AddUnsigned(c, CC)
  546.         d = AddUnsigned(d, DD)
  547.     Next
  548.     
  549.     if stype=32 then
  550.     Dvbbs_MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))
  551.     else
  552.     Dvbbs_MD5=LCase(WordToHex(b) & WordToHex(c))  'I crop this to fit 16byte database password :D
  553.     end if
  554. End Function
  555. %>
  556.