MD5 加密算法示例

互联网 - 09-05

以下示例是MD5算法在ASP源码,

<%
  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)
  
  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 (&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