急,要128位的MD5加密解密代码
马上结帐

解决方案 »

  1.   

    解密?  请call 王小云  hoho~~~~
      

  2.   

    楼主还是有问题的,只有加密后的结果,没有加密密码。
    不要走弯路了你可以用下面两种MD5加密方法来用,都可以MD5加密,但结果有所不同,具体区别自己去查MSDN。
    protected static string HashEncrypt_MD5( string password )
    {
    string strRet = "";
    UnicodeEncoding en = new UnicodeEncoding();
    byte[] oriBt = en.GetBytes( password );
    MD5 CryptSrv = new MD5CryptoServiceProvider();
    byte[] cryBt = CryptSrv.ComputeHash( oriBt );

    strRet = BitConverter.ToString( cryBt );
    return strRet;
    }
    protected static string HashEncrypt_MD5( string password )
    {
    string strRet =
    System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password,"md5");
    return strRet;
    }
      

  3.   

    Richardhu你说的这个我知道啊,32位分组级联产生128位的散列结值,按64位的是怎么产生的呢?
      

  4.   

    楼主强人,居然知道MD5可以解密了。
    Richardhu(学无止境):MD5可以解密吗?不是不可逆的吗!关注!
    原来一直认为MD5是不可逆的,但前不久中过的一个数学家已经把md5给解密了,也就是说MD5是可逆了,但我只知道可以,不知道如何去做!
      

  5.   

    第一段Private Const BITS_TO_A_BYTE = 8
    Private Const BYTES_TO_A_WORD = 4
    Private Const BITS_TO_A_WORD = 32Private 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 FunctionPrivate 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 FunctionPrivate Function RotateLeft(lValue, iShiftBits)
        RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits))
    End FunctionPrivate 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 FunctionPrivate Function md5_F(x, y, z)
        md5_F = (x And y) Or ((Not x) And z)
    End FunctionPrivate Function md5_G(x, y, z)
        md5_G = (x And z) Or (y And (Not z))
    End FunctionPrivate Function md5_H(x, y, z)
        md5_H = (x Xor y Xor z)
    End FunctionPrivate Function md5_I(x, y, z)
        md5_I = (y Xor (x Or (Not z)))
    End Function
      

  6.   

    第二段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 SubPrivate 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 SubPrivate 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 SubPrivate 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 SubPrivate 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 FunctionPrivate 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 FunctionPublic 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)
        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)
      

  7.   

    关注,我也刚要用到这个,谁能提供一下128位MD5的加密代码啊,最好是C#的
      

  8.   

    MD5.h//---------------------------------------------------------------------------#include <vcl.h> //如果返回128位的串是char*,不需要这个头文件,这里我是用C++Biulder处理返回串
    #ifndef encryptuH
    #define encryptuH
    #ifdef __cplusplus
    extern "C" {
    #endif
    #ifdef __alpha
    typedef unsigned int uint32;
    #else
    typedef unsigned long uint32;
    #endif
    //---------------------------------------------------------------------------
    struct MD5Context {
            uint32 buf[4];
            uint32 bits[2];
            unsigned char in[64];
    };
    typedef struct MD5Context MD5_CTX;
    class TEncrypt
    {
     private:
            unsigned char Digest[16];
            MD5Context *MD5T;
            void MD5Init(struct MD5Context *ctx);
            void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len);
            void MD5Final(unsigned char digest[16], struct MD5Context *ctx);
            void MD5Transform(uint32 buf[4], uint32 in[16]);
     public:
            TEncrypt(char *buf, unsigned len);
            ~TEncrypt();
            AnsiString GetResul(); //
    };
    //---------------------------------------------------------------------------
    #ifdef __cplusplus
    }  /* extern "C" */
    #endif
    #endif