• 关于.NET中MD5加密与ASP中MD5加密值不同的解决办法


    问题:正在做一个ASP到ASP.NET的商城改版,原来的注册用户需要保留,原来的用户密码是ASP的MD5,32位加密,记得ASP的MD5与ASP.NET的MD5加密结果并不相等,于是试了下:
    原来用的一个MD5加密方法:
            /// <summary>
            /// MD5加密算法
            /// </summary>
            /// <param name="md5str">要加密的字符串</param>
            /// <returns>md5加密结果</returns>
            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;
            }

    后来无意中发现有更简单的实现方法
            /// <summary>
            /// MD5加密算法
            /// </summary>
            /// <param name="md5str">要加密的字符串</param>
            /// <returns>md5加密结果</returns>
            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个,于是:
            /// <summary>
            /// ASP MD5加密算法
            /// </summary>
            /// <param name="md5str">要加密的字符串</param>
            /// <param name="type">16还是32位加密</param>
            /// <returns>Asp md5加密结果</returns>
            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加密结果。


    -----------------------2007.08.07日加----------------------------------

    好像这个问题早就有人解决了,我在以前做的项目中找到如下方法

        public static string GetMD5(string s)
        {

            /// <summary>
            /// 与ASP兼容的MD5加密算法
            /// </summary>

            MD5 md5 = new MD5CryptoServiceProvider();
            byte[] t = md5.ComputeHash(Encoding.GetEncoding("gb2312").GetBytes(s));
            StringBuilder sb = new StringBuilder(32);
            for (int i = 0; i < t.Length; i++)
            {
                sb.Append(t[i].ToString("x").PadLeft(2, '0'));
            }
            return sb.ToString();
        }

  • 相关阅读:
    C#编写功能让你的系统导入注册表文件时不提示
    登陆框提示历史记录
    C# 操作系统防火墙
    C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装 (续集Tomcat 配置)
    C# 修饰符你记住了吗?
    C# 实现设置系统环境变量设置
    showModalDialog使用例子,父窗口向子窗口传递值
    C#后台无刷新页面弹出alert方法
    VS2008 无法启动调试.未安装Silverlight托管调试包 .
    在GridView中使用FindControl .
  • 原文地址:https://www.cnblogs.com/fantaohaoyou/p/777366.html
Copyright © 2020-2023  润新知