主要是因为读取的密码字段是ASP用MD5加密的,现在用ASP.NET做的登陆页来判断用户输入的密码是否正确,需用如何做,求救!!

解决方案 »

  1.   

    asp.net with c# 可以用以下这个MD5函数吗/<%
    '--------------------------------------
    ' COCOON Disk Manager v3 -- MD5 Function
    '
    ' 经典 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
    End If

    AddUnsigned = lResult
    End Function

    Private Function md5_F(x, y, z)
    md5_F = (x And y) Or ((Not x) And z)
    End Function

    Private Function md5_G(x, y, z)
    md5_G = (x And z) Or (y And (Not z))
    End Function

    Private Function md5_H(x, y, z)
    md5_H = (x Xor y Xor z)
    End Function

    Private Function md5_I(x, y, z)
    md5_I = (y Xor (x Or (Not z)))
    End Function

    Private Sub md5_FF(a, b, c, d, x, s, ac)
    a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac))
    a = RotateLeft(a, s)
    a = AddUnsigned(a, b)
    End Sub

    Private Sub md5_GG(a, b, c, d, x, s, ac)
    a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac))
    a = RotateLeft(a, s)
    a = AddUnsigned(a, b)
    End Sub

    Private Sub md5_HH(a, b, c, d, x, s, ac)
    a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_H(b, c, d), x), ac))
    a = RotateLeft(a, s)
    a = AddUnsigned(a, b)
    End Sub

    Private Sub md5_II(a, b, c, d, x, s, ac)
    a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_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)
    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)
    …………………………
    ………………
      

  2.   

    FormsAuthentication.HashPasswordForStoringInConfigFile(password.Text, "MD5");
      

  3.   

    这个取得的值和用ASP md5加密的值不同的啊.
      

  4.   

    /// <summary>
    /// 传入明文,返回用MD5加密后的字符串
    /// </summary>
    /// <param name="str">要加密的字符串</param>
    /// <returns>用MD5加密后的字符串</returns>
    public static  string ToMD5( string str)
    {
    return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "md5");
    }
    /// <summary>
    /// 传入明文,返回用MD%加密后的字符串
    /// </summary>
    /// <param name="str">要加密的字符串</param>
    /// <returns>用sha1加密后的字符串</returns>
    public static  string ToSHA1( string str)
    {
    return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "sha1");
    }
      

  5.   

    用这个
    System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "md5");得出来的字符串并不等于asp中 md5(str)
      

  6.   

    asp下的MD5默认是16位的,而.NET下的是32位的。
    所以判断的时候做一下转换就行了。
    dim psw as string="用户输入的密码"
    Dim password As String
    password = fa.HashPasswordForStoringInConfigFile(psw, "MD5")
    Dim oldPsw As String = read.Item("UserPassword").ToString '原ASP数据库中的加密密码
    '判断
    If LCase(Left(Mid(password, 9), 16)) = LCase(oldPsw) Then
      '密码正确
    else
      '密码错误
    end ifwww.soeye.cn
      

  7.   

    找到解决方案了,asp.net引用内容:
    public string md5(string str,int code)
    {
     if(code==16) //16位MD5加密(取32位加密的9~25字符)
     {
     return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5").ToLower().Substring(8,16) ;
     } 
     else//32位加密
     {
     return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5").ToLower();
     } 
    }
    谢谢各位!