刚刚学习,不要见笑.就是对一个字符串进行MD5 得到一个密文输出来就可以了.
好象有个MD5的类,不会用.
谁能指导我下.

解决方案 »

  1.   

    呵呵,学一下这个东西
    System.Security.Cryptography.MD5
    网上找一下有一大堆的,呵呵,LZ努力吧========================================================
    我一定要超过他!!!!!!
    做出我最强的东西!!!!!
    再和他一比高下!!!!!!
    ========================================================
      

  2.   

    System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(source,"MD5");
      

  3.   

    public static string EncryptMD5(string source,bool blnPwd)
    {
    return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(source,"MD5");
    }
      

  4.   

    public static string EncryptMD5(string source)
    {
    return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(source,"MD5");
    }
      

  5.   

    string md5Str = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5");楼上的兄弟正解,不过要注意一般会用md5Str.ToLower()转化一下来用
      

  6.   

    或者:using System.Security.Cryptography;public static string EncryptMD5(string source)
    {
    byte[] data = Encoding.Unicode.GetBytes(source.ToCharArray());
    MD5 md5 = new MD5CryptoServiceProvider();
    byte[] result = md5.ComputeHash(data);
    string sResult = Encoding.Unicode.GetString(result);
    return sResult;
    }
      

  7.   

    Encoding.Unicode  这个是不是应该是  ASP.NET  中需要用到的
      

  8.   

    引用System.Security.Cryptographypublic static string MD5(string source)
    {
    byte[] data = Encoding.Unicode.GetBytes(source.ToCharArray());
    MD5 md5 = new MD5CryptoServiceProvider();
    byte[] result = md5.ComputeHash(data);
    string sResult = Encoding.Unicode.GetString(result);
    return sResult;
    }
    我做的时候只加密了密码,在数据里也显示加密的字串哦,
      

  9.   

    我的运行时显示  E:\Visual Studio Projects\WindowsApplication2\Form1.cs(120): 找不到类型或命名空间名称“Encoding”(是否缺少 using 指令或程序集引用?)
    引用System.Security.Cryptography  我已经引用了 .我做的是 WINDOWS应用程序
      

  10.   

    using System.Web.Security;string pass=FormsAuthentication.HashPasswordForStoringInConfigFile(this.TextBox2.Text.Trim(),"SHA1");  //SHA1换成MD5就行了。就这么简单。
      

  11.   

    <%@ Page language="c#" %>   <%@ Import Namespace="System.Web.Security" %>   <html>   <head>   <script language="C#" runat="server">   public void encryptString(Object sender, EventArgs e)   {   SHA1.Text = FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Text,"SHA1");   MD5.Text =FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Text, "MD5") ;   }   </script> 
      </head> 
      <body>   <form runat="server" ID="Form1">   <p>   <b>Original Clear Text Password: </b>   <br>   <asp:Textbox id="txtPassword" runat="server" />   <asp:Button runat="server" text="Encrypt String" onClick="encryptString" ID="Button1" />   </p>   <p>   <b>Encrypted Password In SHA1: </b>     <asp:label id="SHA1" runat="server" />   </p>   <p>   <b>Encrypted Password In MD5: </b>   <asp:label id="MD5" runat="server" />   </p>   </form>   </body>   </html>   正如你所看到的这样简单易用。我们可以把这段加密程序封装在一个函数里便于重复的使用。代码如下:  public string EncryptPassword(string PasswordString,string PasswordFormat )   {   if (PasswordFormat="SHA1"){   EncryptPassword=FormsAuthortication.HashPasswordForStoringInConfigFile(PasswordString ,"SHA1");   }   elseif (PasswordFormat="MD5")   { EncryptPassword=FormsAuthortication.HashPasswordForStoringInConfigFile(PasswordString ,"MD5");   }   else   {   EncryptPassword="";   }   我们可以在数据库中添加一个字段,使用insert将加密的口令作为一个string存入数据库中。当用户登陆的时候,就可以将用户输入的口令加密结果和数据库中的正确结果比较,通过这种办法来验证口令的正确性了
      

  12.   

    不是ASP.NET哦.     呵呵
      

  13.   

    using System.Web .Security ;private void Button2_Click(object sender, System.EventArgs e)
    {
    this.TextBox1 .Text =FormsAuthentication.HashPasswordForStoringInConfigFile (this.TextBox1 .Text .Trim (),"md5");
    }
      

  14.   

    using System.Web .Security ; //不存在此命名空间
    我的机器只有
    using Sytem.Web;
      

  15.   

    我有demo,要的话联系我253878078,写名:csdn
      

  16.   

    加了  CPUCN    332690958
      

  17.   

    不好意思,漏了个namespace
    Encoding
    using System.Text;
      

  18.   

    这样可以了吗?using System.Security.Cryptography;
    using System.Text;public static string EncryptMD5(string source)
    {
    byte[] data = Encoding.Unicode.GetBytes(source.ToCharArray());
    MD5 md5 = new MD5CryptoServiceProvider();
    byte[] result = md5.ComputeHash(data);
    string sResult = Encoding.Unicode.GetString(result);
    return sResult;
    }
      

  19.   

    我将结果 给了一个textBox控件 但是出来的东西都是乱码.
      

  20.   

    强调下,我做的是WINDOWS 应用程序.
     Encoding.Unicode  和这个有关系么?
      

  21.   

    asp.net中用的是C#啊,你可以整理一下
      

  22.   

    asp.net与C#不是一回事,在asp.net中有专门的方法,但C#中是没有的同意 viena(维也纳nn-实心木头人)的方法
      

  23.   

    viena(维也纳nn-实心木头人)  首先感谢你的帮助.
    但是用了你的方法,的确是行不通的,因为显示出来的内容都是乱码.
    我想using System.Security.Cryptography;
    using System.Text;public static string EncryptMD5(string source)
    {
    byte[] data = Encoding.Unicode.GetBytes(source.ToCharArray());
    MD5 md5 = new MD5CryptoServiceProvider();
    byte[] result = md5.ComputeHash(data);
    string sResult = Encoding.Unicode.GetString(result);
    return sResult;
    }
    用在ASP.NET 中应该是可以的吧.
    我用C#做的WINDOWS应用程序.结果都是乱码
    还恳请多多指教.
    要不我们QQ联系:332690958
      

  24.   

    .Net框架由于拥有CLR提供的丰富库支持,只需很少的代码即可实现先前使用C等旧式语言很难实现的加密算法。本类实现一些常用机密算法,供参考。其中MD5算法返回Int的ToString字串。using System;
    using System.IO;
    using System.Data;
    using System.Text;
    using System.Diagnostics;
    using System.Security;
    using System.Security.Cryptography;namespace com.Quickline.Encrypt
    {
     /// <summary>
     /// 类名:HashEncrypt
     /// 作用:对传入的字符串进行Hash运算,返回通过Hash算法加密过的字串。
     /// 属性:[无]
     /// 构造函数额参数:
     /// IsReturnNum:是否返回为加密后字符的Byte代码
     /// IsCaseSensitive:是否区分大小写。
     /// 方法:此类提供MD5,SHA1,SHA256,SHA512等四种算法,加密字串的长
    度依次增大。
     /// </summary>
     public class HashEncrypt
     {
      //private string strIN;
      private bool isReturnNum;
      private bool isCaseSensitive;
      
      public HashEncrypt(bool IsCaseSensitive,bool IsReturnNum)
      {
       this.isReturnNum = IsReturnNum;
       this.isCaseSensitive = IsCaseSensitive;
      }
      
      
      private string getstrIN(string strIN)
      {
       //string strIN = strIN;
       if (strIN.Length == 0)
       {
        strIN = "~NULL~";
       }
       if (isCaseSensitive == false)
       {
        strIN = strIN.ToUpper();
       }
       return strIN;
      }
      public string MD5Encrypt(string strIN)
      {
       //string strIN = getstrIN(strIN);
       byte[] tmpByte;
       MD5 md5 = new MD5CryptoServiceProvider();
       tmpByte =
    md5.ComputeHash(GetKeyByteArray(getstrIN(strIN)));
       md5.Clear();   return GetStringValue(tmpByte);  }
      
      public string SHA1Encrypt(string strIN)
      {
       //string strIN = getstrIN(strIN);
       byte[] tmpByte;
       SHA1 sha1 = new SHA1CryptoServiceProvider();   tmpByte = sha1.ComputeHash(GetKeyByteArray(strIN));
       sha1.Clear();   return GetStringValue(tmpByte);  }  public string SHA256Encrypt(string strIN)
      {
       //string strIN = getstrIN(strIN);
       byte[] tmpByte;
       SHA256 sha256 = new SHA256Managed();   tmpByte =
    sha256.ComputeHash(GetKeyByteArray(strIN));
       sha256.Clear();   return GetStringValue(tmpByte);  }  public string SHA512Encrypt(string strIN)
      {
       //string strIN = getstrIN(strIN);
       byte[] tmpByte;
       SHA512 sha512 = new SHA512Managed();   tmpByte =
    sha512.ComputeHash(GetKeyByteArray(strIN));
       sha512.Clear();   return GetStringValue(tmpByte);  }
      
      /// <summary>
      /// 使用DES加密(Added by niehl 2005-4-6)
      /// </summary>
      /// <param name="originalValue">待加密的字符串</param>
      /// <param name="key">密钥(最大长度8)</param>
      /// <param name="IV">初始化向量(最大长度8)</param>
      /// <returns>加密后的字符串</returns>
      public string DESEncrypt(string originalValue,string key,string IV)
      {
       //将key和IV处理成8个字符
       key += "12345678";
       IV += "12345678";
       key = key.Substring(0,8);
       IV = IV.Substring(0,8);   SymmetricAlgorithm sa;
       ICryptoTransform ct;
       MemoryStream ms;
       CryptoStream cs;
       byte[] byt;   sa = new DESCryptoServiceProvider();
       sa.Key = Encoding.UTF8.GetBytes(key);
       sa.IV = Encoding.UTF8.GetBytes(IV);
       ct = sa.CreateEncryptor();   byt = Encoding.UTF8.GetBytes(originalValue);   ms = new MemoryStream();
       cs = new CryptoStream(ms, ct,
    CryptoStreamMode.Write);
       cs.Write(byt, 0, byt.Length);
       cs.FlushFinalBlock();   cs.Close();   return Convert.ToBase64String(ms.ToArray());  }  public string DESEncrypt(string originalValue,string key)
      {
       return DESEncrypt(originalValue,key,key);
      }  /// <summary>
      /// 使用DES解密(Added by niehl 2005-4-6)
      /// </summary>
      /// <param name="encryptedValue">待解密的字符串</param>
      /// <param name="key">密钥(最大长度8)</param>
      /// <param name="IV">m初始化向量(最大长度8)</param>
      /// <returns>解密后的字符串</returns>
      public string DESDecrypt(string encryptedValue,string key,string IV)
      {
       //将key和IV处理成8个字符
       key += "12345678";
       IV += "12345678";
       key = key.Substring(0,8);
       IV = IV.Substring(0,8);   SymmetricAlgorithm sa;
       ICryptoTransform ct;
       MemoryStream ms;
       CryptoStream cs;
       byte[] byt;   sa = new DESCryptoServiceProvider();
       sa.Key = Encoding.UTF8.GetBytes(key);
       sa.IV = Encoding.UTF8.GetBytes(IV);
       ct = sa.CreateDecryptor();   byt = Convert.FromBase64String(encryptedValue);   ms = new MemoryStream();
       cs = new CryptoStream(ms, ct,
    CryptoStreamMode.Write);
       cs.Write(byt, 0, byt.Length);
       cs.FlushFinalBlock();   cs.Close();   return Encoding.UTF8.GetString(ms.ToArray());  }  public string DESDecrypt(string encryptedValue,string key)
      {
       return DESDecrypt(encryptedValue,key,key);
      }  private string GetStringValue(byte[] Byte)
      {
       string tmpString = "";   if (this.isReturnNum == false)
       {
        ASCIIEncoding Asc = new ASCIIEncoding();
        tmpString = Asc.GetString(Byte);
       }
       else
       {
        int iCounter;    for
    (iCounter=0;iCounter<Byte.Length;iCounter++)
        {
         tmpString = tmpString +
    Byte[iCounter].ToString();
        }
        
       }
       
       return tmpString;
      }  private byte[] GetKeyByteArray(string strKey)
      {   ASCIIEncoding Asc = new ASCIIEncoding();
       
       int tmpStrLen = strKey.Length;
       byte[] tmpByte = new byte[tmpStrLen-1];   tmpByte = Asc.GetBytes(strKey);   return tmpByte;  } }
    }
      

  25.   

    using System;namespace EncryptMD5
    {
    public class MD5
    {
    public MD5()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //

    }
    #region MD5
    private const int BITS_TO_A_BYTE = 8;
    private const int BYTES_TO_A_WORD = 4;
    private const int BITS_TO_A_WORD = 32; private static long[] m_lOnBits = new long[30 + 1];
    private static long[] m_l2Power = new long[30 + 1]; private static long LShift(long lValue, long iShiftBits)
    {
    long LShift = 0;
    if (iShiftBits == 0)
    {
    LShift = lValue;
    return LShift;
    }
    else
    {
    if( iShiftBits == 31)
    {
    if (Convert.ToBoolean(lValue & 1))
    {
    LShift = 0x80000000;
    }
    else
    {
    LShift = 0;
    }
    return LShift;
    }
    else
    {
    if( iShiftBits < 0 || iShiftBits > 31)
    {
    // Err.Raise 6;
    }
    }
    } if (Convert.ToBoolean((lValue & m_l2Power[31 - iShiftBits])))
    {
    LShift = ((lValue & m_lOnBits[31 - (iShiftBits + 1)]) * m_l2Power[iShiftBits]) | 0x80000000;
    }
    else
    {
    LShift = ((lValue & m_lOnBits[31 - iShiftBits]) * m_l2Power[iShiftBits]);
    } return LShift;
    } private static long RShift(long lValue, long iShiftBits)
    {
    long RShift = 0;
    if (iShiftBits == 0)
    {
    RShift = lValue;
    return RShift;
    }
    else
    {
    if( iShiftBits == 31)
    {
    if (Convert.ToBoolean(lValue & 0x80000000))
    {
    RShift = 1;
    }
    else
    {
    RShift = 0;
    }
    return RShift;
    }
    else
    {
    if( iShiftBits < 0 || iShiftBits > 31)
    {
    // Err.Raise 6;
    }
    }
    } RShift = (lValue & 0x7FFFFFFE) / m_l2Power[iShiftBits]; if (Convert.ToBoolean((lValue & 0x80000000)))
    {
    RShift = (RShift | (0x40000000 / m_l2Power[iShiftBits - 1]));
    } return RShift;
    } private static long RotateLeft(long lValue, long iShiftBits)
    {
    long RotateLeft = 0;
    RotateLeft = LShift(lValue, iShiftBits) | RShift(lValue, (32 - iShiftBits));
    return RotateLeft;
    } private static long AddUnsigned(long lX, long lY)
    {
    long AddUnsigned = 0;
    long lX4 = 0;
    long lY4 = 0;
    long lX8 = 0;
    long lY8 = 0;
    long lResult = 0; lX8 = lX & 0x80000000;
    lY8 = lY & 0x80000000;
    lX4 = lX & 0x40000000;
    lY4 = lY & 0x40000000; lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
    if (Convert.ToBoolean(lX4 & lY4))
    {
    lResult = lResult ^ 0x80000000 ^ lX8 ^ lY8;
    }
    else if( Convert.ToBoolean(lX4 | lY4))
    {
    if (Convert.ToBoolean(lResult & 0x40000000))
    {
    lResult = lResult ^ 0xC0000000 ^ lX8 ^ lY8;
    }
    else
    {
    lResult = lResult ^ 0x40000000 ^ lX8 ^ lY8;
    }
    }
    else
    {
    lResult = lResult ^ lX8 ^ lY8;
    }
    AddUnsigned = lResult;
    return AddUnsigned;
    } private static long md5_F(long x, long y, long z)
    {
    long md5_F = 0;
    md5_F = (x & y) | (( ~x) & z);
    return md5_F;
    } private static long md5_G(long x, long y, long z)
    {
    long md5_G = 0;
    md5_G = (x & z) | (y & ( ~z));
    return md5_G;
    } private static long md5_H(long x, long y, long z)
    {
    long md5_H = 0;
    md5_H = (x ^ y ^ z);
    return md5_H;
    } private static long md5_I(long x, long y, long z)
    {
    long md5_I = 0;
    md5_I = (y ^ (x | (~z)));
    return md5_I;
    } private static void md5_FF(ref long a, long b, long c, long d, long x, long s, long ac)
    {
    a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac));
    a = RotateLeft(a, s);
    a = AddUnsigned(a, b);
    } private static void md5_GG(ref long a, long b, long c, long d, long x, long s, long ac)
    {
    a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac));
    a = RotateLeft(a, s);
    a = AddUnsigned(a, b);
    } private static void md5_HH(ref long a, long b, long c, long d, long x, long s, long ac)
    {
    a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_H(b, c, d), x), ac));
    a = RotateLeft(a, s);
    a = AddUnsigned(a, b);
    } private static void md5_II(ref long a, long b, long c, long d, long x, long s, long ac)
    {
    a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_I(b, c, d), x), ac));
    a = RotateLeft(a, s);
    a = AddUnsigned(a, b);
    }
      

  26.   

    private static long[] ConvertToWordArray(string sMessage)
    {
    long[] ConvertToWordArray = null;
    int lMessageLength = 0;
    int lNumberOfWords = 0;
    long[] lWordArray = null;
    int lBytePosition = 0;
    int lByteCount = 0;
    int lWordCount = 0; const int MODULUS_BITS = 512;
    const int CONGRUENT_BITS = 448; lMessageLength = sMessage.Length;
    lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) / BITS_TO_A_BYTE)) / (MODULUS_BITS / BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS / BITS_TO_A_WORD);
    lWordArray = new long[lNumberOfWords]; lBytePosition = 0;
    lByteCount = 0; while(lByteCount < lMessageLength)
    {
    lWordCount = lByteCount / BYTES_TO_A_WORD;
    lBytePosition = (lByteCount % BYTES_TO_A_WORD) * BITS_TO_A_BYTE;
    lWordArray[lWordCount] = lWordArray[lWordCount] | LShift(Convert.ToByte(sMessage.Substring(lByteCount, 1).ToCharArray()[0]), lBytePosition);
    lByteCount = lByteCount + 1;
    } lWordCount = lByteCount / BYTES_TO_A_WORD;
    lBytePosition = (lByteCount % BYTES_TO_A_WORD) * BITS_TO_A_BYTE;
    lWordArray[lWordCount] = lWordArray[lWordCount] | LShift(0x80, lBytePosition);
    lWordArray[lNumberOfWords - 2] = LShift(lMessageLength, 3);
    lWordArray[lNumberOfWords - 1] = RShift(lMessageLength, 29);
    ConvertToWordArray = lWordArray; return ConvertToWordArray;
    } private static string WordToHex(long lValue)
    {
    string WordToHex = "";
    long lByte = 0;
    int lCount = 0;
    for(lCount = 0; lCount <= 3; lCount++)
    {
    lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) & m_lOnBits[BITS_TO_A_BYTE - 1];
    WordToHex = WordToHex + (("0" + ToHex(lByte)).Substring(("0" + ToHex(lByte)).Length - 2));
    }
    return WordToHex;
    } public static string ToMD5(string sMessage)
    {
    string MD5 = "";
    int stype = 32;
       
    for(int i=0; i<=30; i++)
    {
    m_lOnBits[i] = Convert.ToInt64(Math.Pow(2, i+1) -1);
    m_l2Power[i] = Convert.ToInt64(Math.Pow(2, i));
    } long[] x = null;
    int k = 0;
    long AA = 0;
    long BB = 0;
    long CC = 0;
    long DD = 0;
    long a = 0;
    long b = 0;
    long c = 0;
    long d = 0; const int S11 = 7;
    const int S12 = 12;
    const int S13 = 17;
    const int S14 = 22;
    const int S21 = 5;
    const int S22 = 9;
    const int S23 = 14;
    const int S24 = 20;
    const int S31 = 4;
    const int S32 = 11;
    const int S33 = 16;
    const int S34 = 23;
    const int S41 = 6;
    const int S42 = 10;
    const int S43 = 15;
    const int S44 = 21; x = ConvertToWordArray(sMessage); a = 0x67452301;
    b = 0xEFCDAB89;
    c = 0x98BADCFE;
    d = 0x10325476; for(k = 0; k < x.Length; k += 16)
    {
    AA = a;
    BB = b;
    CC = c;
    DD = d; md5_FF(ref a, b, c, d, x[k + 0], S11, 0xD76AA478);
    md5_FF(ref d, a, b, c, x[k + 1], S12, 0xE8C7B756);
    md5_FF(ref c, d, a, b, x[k + 2], S13, 0x242070DB);
    md5_FF(ref b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
    md5_FF(ref a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
    md5_FF(ref d, a, b, c, x[k + 5], S12, 0x4787C62A);
    md5_FF(ref c, d, a, b, x[k + 6], S13, 0xA8304613);
    md5_FF(ref b, c, d, a, x[k + 7], S14, 0xFD469501);
    md5_FF(ref a, b, c, d, x[k + 8], S11, 0x698098D8);
    md5_FF(ref d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
    md5_FF(ref c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
    md5_FF(ref b, c, d, a, x[k + 11], S14, 0x895CD7BE);
    md5_FF(ref a, b, c, d, x[k + 12], S11, 0x6B901122);
    md5_FF(ref d, a, b, c, x[k + 13], S12, 0xFD987193);
    md5_FF(ref c, d, a, b, x[k + 14], S13, 0xA679438E);
    md5_FF(ref b, c, d, a, x[k + 15], S14, 0x49B40821);
    md5_GG(ref a, b, c, d, x[k + 1], S21, 0xF61E2562);
    md5_GG(ref d, a, b, c, x[k + 6], S22, 0xC040B340);
    md5_GG(ref c, d, a, b, x[k + 11], S23, 0x265E5A51);
    md5_GG(ref b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
    md5_GG(ref a, b, c, d, x[k + 5], S21, 0xD62F105D);
    md5_GG(ref d, a, b, c, x[k + 10], S22, 0x2441453);
    md5_GG(ref c, d, a, b, x[k + 15], S23, 0xD8A1E681);
    md5_GG(ref b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
    md5_GG(ref a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
    md5_GG(ref d, a, b, c, x[k + 14], S22, 0xC33707D6);
    md5_GG(ref c, d, a, b, x[k + 3], S23, 0xF4D50D87);
    md5_GG(ref b, c, d, a, x[k + 8], S24, 0x455A14ED);
    md5_GG(ref a, b, c, d, x[k + 13], S21, 0xA9E3E905);
    md5_GG(ref d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
    md5_GG(ref c, d, a, b, x[k + 7], S23, 0x676F02D9);
    md5_GG(ref b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
    md5_HH(ref a, b, c, d, x[k + 5], S31, 0xFFFA3942);
    md5_HH(ref d, a, b, c, x[k + 8], S32, 0x8771F681);
    md5_HH(ref c, d, a, b, x[k + 11], S33, 0x6D9D6122);
    md5_HH(ref b, c, d, a, x[k + 14], S34, 0xFDE5380C);
    md5_HH(ref a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
    md5_HH(ref d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
    md5_HH(ref c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
    md5_HH(ref b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
    md5_HH(ref a, b, c, d, x[k + 13], S31, 0x289B7EC6);
    md5_HH(ref d, a, b, c, x[k + 0], S32, 0xEAA127FA);
    md5_HH(ref c, d, a, b, x[k + 3], S33, 0xD4EF3085);
    md5_HH(ref b, c, d, a, x[k + 6], S34, 0x4881D05);
    md5_HH(ref a, b, c, d, x[k + 9], S31, 0xD9D4D039);
    md5_HH(ref d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
    md5_HH(ref c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
    md5_HH(ref b, c, d, a, x[k + 2], S34, 0xC4AC5665);
    md5_II(ref a, b, c, d, x[k + 0], S41, 0xF4292244);
    md5_II(ref d, a, b, c, x[k + 7], S42, 0x432AFF97);
    md5_II(ref c, d, a, b, x[k + 14], S43, 0xAB9423A7);
    md5_II(ref b, c, d, a, x[k + 5], S44, 0xFC93A039);
    md5_II(ref a, b, c, d, x[k + 12], S41, 0x655B59C3);
    md5_II(ref d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
    md5_II(ref c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
    md5_II(ref b, c, d, a, x[k + 1], S44, 0x85845DD1);
    md5_II(ref a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
    md5_II(ref d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
    md5_II(ref c, d, a, b, x[k + 6], S43, 0xA3014314);
    md5_II(ref b, c, d, a, x[k + 13], S44, 0x4E0811A1);
    md5_II(ref a, b, c, d, x[k + 4], S41, 0xF7537E82);
    md5_II(ref d, a, b, c, x[k + 11], S42, 0xBD3AF235);
    md5_II(ref c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
    md5_II(ref b, c, d, a, x[k + 9], S44, 0xEB86D391); a = AddUnsigned(a, AA);
    b = AddUnsigned(b, BB);
    c = AddUnsigned(c, CC);
    d = AddUnsigned(d, DD);
    } if (stype == 32)
    {
    MD5 = ((((WordToHex(a)) + (WordToHex(b))) + (WordToHex(c))) + (WordToHex(d))).ToLower();
    }
    else
    {
    MD5 = ((WordToHex(b)) + (WordToHex(c))).ToLower();
    }
    return MD5;
    }
      
    private static string ToHex(long dec)
    {
    string strhex = "";
    while(dec > 0)
    {
    strhex = tohex(dec % 16) + strhex;
    dec = dec / 16;
    }
    return strhex;
    }
      
    private static string tohex(long hex)
    {
    string strhex = "";
    switch(hex)
    {
    case 10: strhex = "a"; break;
    case 11: strhex = "b"; break;
    case 12: strhex = "c"; break;
    case 13: strhex = "d"; break;
    case 14: strhex = "e"; break;
    case 15: strhex = "f"; break;
    default : strhex = hex.ToString(); break;
    }
    return strhex;
    }
    #endregion
    }
    }
      

  27.   

    System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile
      

  28.   

    这是我在项目中写的MD5加密算法实现,你参考一下:
    /*************************************************************************
    * Copyright(C) 2004-2005
    ************************************************************************/using System;
    using System.Text;
    using System.IO;
    using System.Security.Cryptography;namespace CryptionDataMD5
    {
    /// <summary>
    /// Make message digest based on MD5 for byte array and string
    /// </summary>
    /// <Author>Yao</Author>
    /// <Date>2005/06/13</Date>
    public class CryptionDataMD5
    {
    /// <summary>
    /// Make message digest based on MD5 for byte array
    /// </summary>
    /// <param name="origin">source byte array</param>
    /// <returns>message digest</returns>
    public static string EncryptionByteData(byte[] SourceData)
    {
    try
    {
    //create a stream object
    MemoryStream stream = new MemoryStream(SourceData);//define hex table
    const string HEX_TABLE = "0123456789abcdef";//create a MD5CryptoServiceProvider object
    MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
    //Calculate MD5 Checksum
    byte[] hashData = md5.ComputeHash(stream);//convert to string
    StringBuilder sb=new StringBuilder();
    sb.Length =hashData.Length *2;//make string sb
    for(int i=0;i<hashData.Length ;i++)
    {
    sb[i*2]=HEX_TABLE[hashData[i]>>4];
    sb[i*2+1]=HEX_TABLE[hashData[i] & 0xF];
    }return sb.ToString();
    }
    catch (Exception ex)
    {
    throw ex;
    }
    }/// <summary>
    /// /// Make message digest based on MD5 for string
    /// </summary>
    /// <param name="origin">source string</param>
    /// <returns>message digest</returns>
    public static string EncryptionStringData(string SourceData)
    {
    string messageDigest = string.Empty;
    try
    {
    byte[] sorData = Encoding.Default.GetBytes(SourceData);
    messageDigest = EncryptionByteData(sorData);
    }
    catch(Exception ex)
    {
    throw ex;
    }
    return messageDigest;
    }
    }
    }