Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)delvpublished in(发表于) 2014/1/23 3:13:41 关于.NET中MD5加密与ASP中MD5加密值不同的解决办法_[Asp.Net教程]
问题:正在做一个ASP到ASP.NET的商城改版,原来的注册用户需要保留,原来的用户密码是ASP的MD5,32位加密,记得ASP的MD5与ASP.NET的MD5加密结果并不相等,于是试了下:原来用的一个MD5加密方法: /// /// MD5加密算法 /// /// 要加密的字符串 /// md5加密结果 public static string Getmd5(string md5str) { byte[] data; string ret = ""; data = System.Text.Encoding.UTF8.GetBytes(md5str); MD5CryptoServiceProvider MD5OBJ = new MD5CryptoServiceProvider(); byte[] md5byte = MD5OBJ.ComputeHash(data); for (int i = 0; i < md5byte.Length; i++) { ret += md5byte[i].ToString("x").PadLeft(2, '0'); } return ret; }
后来无意中发现有更简单的实现方法 /// /// MD5加密算法 /// /// 要加密的字符串 /// md5加密结果 public static string GetMd5(string md5str) { return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(md5str, "MD5"); }
用第二种方法输出"admin"的MD5加密结果为:21232F297A57A5A743894A0E4A801FC3与ASP MD5加密的16和32位加密结果比较:16位加密(7a57a5a743894a0e)32位加密(21232f297a57a5a743894a0e4a801fc3)
发现与32位加密结果相同,只是字母大小写不同,16位加密结果只是从32位加密结果中取了中间16个,于是: /// /// ASP MD5加密算法 /// /// 要加密的字符串 /// 16还是32位加密 /// Asp md5加密结果 public static string GetAspMd5(string md5str,int type) { if (type == "16") { return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(md5str, "MD5").Substring(8, 16).ToLower(); } else if (type=="32") { return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(md5str, "MD5").ToLower(); } return ""; }上面一个方法实现了在.NET里的ASP MD5加密结果。
来源:fantaohaoyou的blog
赞