很简单,就是这样。byte[] bytePwd = System.Text.Encoding.Default.GetBytes(password);password = System.Text.Encoding.Default.GetString(sha1.ComputeHash(bytePwd));同样的机器,不知道是这个Encoding.Default的问题还是什么问题,我用ASCII、Unicode、UTF7、UTF8编码都试过,都得不到.net 1.1 中的加密后的密码。
1.1中已经有数万用户了,该怎么办才好呢?关键问题:相同的字串在2.0中如何才能得到老系统1.1中的加密结果
原贴:http://community.csdn.net/Expert/topic/4949/4949111.xml?temp=.357052

解决方案 »

  1.   

    System.Text.Encoding.GetEncoding("gb2312")//中文操作系统的Default一般都是gb2312
      

  2.   

    to 这是由于2.0与1.1加密码方稍有不同造成的楼上的高人你确定吗?sha1 加密会不同?
      

  3.   

    由于lz在1.1中使用了Encoding.Default所以在2.0中要使用确定的与其一致的编码方式,不能再用Default结果应该是一致的,对System.Security.Cryptography.SHA1,.net 2.0并没有作什么更改
      

  4.   

    to :System.Text.Encoding.GetEncoding("gb2312")//中文操作系统的Default一般都是gb2312
    这样也是不行的,不过还是谢谢
    byte[] bytePwd = System.Text.Encoding.GetEncoding("gb2312").GetBytes(password);
                
                password = System.Text.Encoding.GetEncoding("gb2312").GetString(sha1.ComputeHash(bytePwd));
      

  5.   

    编码因该没问题,打印两边System.Text.Encoding.Default.EncodingName都是
    GB2312, 可能问题出在sha1上哟
      

  6.   

    ___________________________________________________________________没办法,犯了错误就要承担后果!.ComputeHash方法,得到输入数据的哈希值
    并不是字符编码,直接用来GetString会丢失数据的,得到的是不可预知的值二进制值转字符串一般是用16进制
    每个byte转为两位字符串
    ___________________________________________________________________
      

  7.   

    像这样byte[] result = sha1.ComputeHash(data);
    string sResult = "";
    foreach(byte b in result)
    {
        sResult += Convert.ToString(b,16);
    }
      

  8.   

    to 像这样 byte[] result = sha1.ComputeHash(data);
     string sResult = "";
     foreach(byte b in result)
     {
         sResult += Convert.ToString(b,16);
     }全变成数字和英文的码了啊,我的.net1.1的用户系统不升级2.0的话用了1年也没有出过问题呢。
    2.0加密后有些密码会短一点
      

  9.   

    //全变成数字和英文的码了啊
    散列加密,就是转为16进制字符串的,0-9 A-F我是说
    你原来系统
    password = System.Text.Encoding.Default.GetString(sha1.ComputeHash(bytePwd));
    这一句应该改成那样,就不会出问题了对你的问题我没有办法
      

  10.   

    你需要研究一下,
    1.1从Byte数组到Char数组,再到String的转换过程,
    尤其是对非字符编码字节是怎么处理的
    如果微软没有公开这个过程的处理方式而且没有其它途径得到这个处理方式
    那神仙也没有办法了2.0中的处理方式可能不一样了
      

  11.   

    //不过是1.1中有个口字类型的乱码,在2.0中没有了因为它不是字符编码,无法转换为字符
    而能转换的,也是碰巧是个字符编码而已你(int)强制转换一下看一下它的编码吧
      

  12.   

    比较起来编码都是一样的,但是到数据库里面就不一样了,或许是ado.net2.0 造成的。
      

  13.   

    我这样试过,在VS2003中和VS2005中返回的结果都是一样,你试试
    SHA1 sha1=new SHA1CryptoServiceProvider();
    string pwd="123456";
    string rtnPwd="";
    byte[] bytePwd = System.Text.Encoding.UTF8.GetBytes(pwd);
    rtnPwd=BitConverter.ToString(bytePwd).Replace("-","");
    都返回:313233343536
      

  14.   

    SHA1 sha1 = new SHA1CryptoServiceProvider();
                string pwd = "abc@123";
                string rtnPwd = "";
                byte[] bytePwd = System.Text.ASCIIEncoding.ASCII.GetBytes(pwd);
                byte[] bytepwd2 = sha1.ComputeHash(bytePwd);
                rtnPwd = BitConverter.ToString(bytepwd2).Replace("-", "");
    返回:
    DDAC418A1BE76098D01107464026F65D2A3192BF
      

  15.   

    <xml id="cacheData" src="loadXML.xml" tppabs="loadXML.xml"></xml>