日期:2014-05-18  浏览次数:20970 次

WinForm下对 中文字符串MD5 加密
http://topic.csdn.net/t/20050807/11/4193724.html
这里有个帖 加密结果跟
站长工具http://tools.chinaz.com/ 下面的 32位MD5加密结果不一样
但是加密英文和数字结果是没有错的
就加密中文 结果不对
C# code

public static string Get32MD5(string str)
        {
            byte[] b = System.Text.Encoding.Default.GetBytes(str);
            b = new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(b);
            string ret = "";
            for (int i = 0; i < b.Length; i++)
            {
                ret += b[i].ToString("X").PadLeft(2, '0');
            }
            return ret;
        }


请问怎样让该方法支持中文加密
用上面的方法 如果是我的问题 问题可能出在哪里?

------解决方案--------------------
不存在支持不支持中文...对哈希算法来说...没有中文没有英文也没有数字...只有0和1...

所以你得到的结果和其他工具的结果不同说明...两者用的字符编码不一样...你用的是本机ANSI码...简体中文就是GB2312...
------解决方案--------------------
引入System.Web.dll,用System.Web命名空间的
pass = FormsAuthentication.HashPasswordForStoringInConfigFile(pass, "MD5");
------解决方案--------------------
探讨
byte[] b = System.Text.Encoding.Default.GetBytes(str);
这么说是这里的问题了?

------解决方案--------------------

C# code
// 试试以下之一:
byte[] b = System.Text.Encoding.UTF8.GetBytes(str); 
byte[] b = System.Text.Encoding.Unicode.GetBytes(str); 
byte[] b = System.Text.Encoding.GetEncoding("GB18030").GetBytes(str);