加密函数如下:
private string Encrypt(string s)
{
MD5CryptoServiceProvider hashMD5=new MD5CryptoServiceProvider();
s=ASCIIEncoding.ASCII.GetString(hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(s)));
return s;
}
在VS2003下保存在数据库的密码,在软件升级到VS2005后,登陆提示密码错. 
跟踪发现,好象相同密码加密后字符串,也有点不一样,是什么原因造成的? 怎么办??好着急,请各位大侠帮忙!!!!

解决方案 »

  1.   

    难道微软改了MD5的算法?
    不知道,帮你Up一下
      

  2.   

    问题在ASCIIEncoding.ASCII.GetBytes(s)在2003下和2005下执行结果都不一样...
    ASCIIEncoding.ASCII.GetBytes(s);
      

  3.   

    MD5的算法没变.刚测试了一下..
    ASCIIEncoding.ASCII.GetBytes("1");
    2005下结果为byte[]{49}
    2003下结果为byte[]{1,0}
      

  4.   

    相同的密码加密后的结果如下:VS2003:OI7DtnxICofiZ2
    VS2005:?I7??nx???????2
    请各位帮我分析一下,是什么原因造成的??  是不是那儿设置有问题??
    用的是WEB程序.
      

  5.   

    这个是通用的。#region 加密
    /// <summary>
    /// MD5加密
    /// </summary>
    /// <param name="InputString">要加密的字串</param>
    /// <returns>密文</returns>
    public static string Md5hash_String(string InputString)
    {
                InputString = Md5hash_String(InputString, "MD5");
    return InputString;
    }
    /// <summary>
    /// SHA1,MD5加密 
    /// </summary>
    /// <param name="s">要加密的字符串</param>
    /// <param name="format">加密格式 MD5 或 SHA1</param>
    /// <returns>返回加密后的字串</returns>
    public static string Md5hash_String(string InputString,string format)
    {
    if(format=="SHA1")
    {
    InputString=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(InputString,"SHA1");
    }
    else if(format=="MD5")
    {
    InputString=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(InputString,"MD5");
    }

    return InputString;
    }
    #endregion随便说,你那个根本不是MD5加密,是加密以后在改一下密文。
      

  6.   

    MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();
    s = BitConverter.ToString(hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(s))).Replace("-", "");
    return s;改成这样看看
      

  7.   

    MD5算法是一样的,我的用户管理系统密码也是MD5的,从2003平稳的迁移到了2005,即在2003下注册的用户在2005下能正常登陆,所以算法是一点儿也没更改的,
      

  8.   

    MD5的算法没变......
    是你程序有问题
    s=ASCIIEncoding.ASCII.GetString(hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(s)));中ASCIIEncoding.ASCII.GetBytes(s);语句
    在2003和2005中执行所返回的结果不一样
      

  9.   

    s=ASCIIEncoding.ASCII.GetString(hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(s)));Oh my God……
    哪有你这样编成字符串的啊,用Convert.ToBase64
      

  10.   

    BitConverter.ToString(md5.ComputeHash(btCryptText)).Replace("-","");
    偶用这种方法获得字符串
      

  11.   


    C#的Md5设计应该是这样的.
    string n=fgdkdlfjlgd ;string md5=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(n,"md5").ToLower().Substring(8,16)这个是16位的.
    32位就就不用Substring了s楼主的还不知道是什么Md5.
      

  12.   

    应该是编码问题
    FormsAuthentication.HashPasswordForStoringInConfigFile 是用的utf8编码