读书人

WinForm下对 中文字符串MD5 加密解决方

发布时间: 2012-01-28 22:06:13 作者: rapoo

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); 

读书人网 >C#

热点推荐