再次发贴:只有高手才能回答出的简单问题。。。.net1.1 升级成2.0 后,同样一个sha1加密,却得和1.1到不同的字串(分不够再加)

gasover 2006-08-15 11:19:27
很简单,就是这样。

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
...全文
376 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
gzwuyh 2006-08-18
  • 打赏
  • 举报
回复
vs2003 和 2005当然能装一起了呀。
我这就装的两个。

amingo 2006-08-17
  • 打赏
  • 举报
回复
<xml id="cacheData" src="loadXML.xml" tppabs="loadXML.xml"></xml>
gasover 2006-08-17
  • 打赏
  • 举报
回复
晕,楼上还是没有看懂我的问题啊,对了, vs2003 和 2005 能装在同一个操作系统吗?
viena 2006-08-15
  • 打赏
  • 举报
回复
像这样

byte[] result = sha1.ComputeHash(data);
string sResult = "";
foreach(byte b in result)
{
sResult += Convert.ToString(b,16);
}
viena 2006-08-15
  • 打赏
  • 举报
回复
___________________________________________________________________

没办法,犯了错误就要承担后果!

.ComputeHash方法,得到输入数据的哈希值
并不是字符编码,直接用来GetString会丢失数据的,得到的是不可预知的值

二进制值转字符串一般是用16进制
每个byte转为两位字符串
___________________________________________________________________
Samen168 2006-08-15
  • 打赏
  • 举报
回复
up
qwerttyy 2006-08-15
  • 打赏
  • 举报
回复
帮顶
fds2003 2006-08-15
  • 打赏
  • 举报
回复
关注
gasover 2006-08-15
  • 打赏
  • 举报
回复
编码因该没问题,打印两边System.Text.Encoding.Default.EncodingName都是
GB2312, 可能问题出在sha1上哟
gasover 2006-08-15
  • 打赏
  • 举报
回复
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));
Eddie005 2006-08-15
  • 打赏
  • 举报
回复
由于lz在1.1中使用了Encoding.Default

所以在2.0中要使用确定的与其一致的编码方式,不能再用Default

结果应该是一致的,对System.Security.Cryptography.SHA1,.net 2.0并没有作什么更改
gasover 2006-08-15
  • 打赏
  • 举报
回复
to 这是由于2.0与1.1加密码方稍有不同造成的

楼上的高人你确定吗?sha1 加密会不同?
www_123du_com 2006-08-15
  • 打赏
  • 举报
回复
System.Text.Encoding.GetEncoding("gb2312")//中文操作系统的Default一般都是gb2312
shalen520 2006-08-15
  • 打赏
  • 举报
回复
关注下,没遇到过
CNLAN 2006-08-15
  • 打赏
  • 举报
回复
这是由于2.0与1.1加密码方稍有不同造成的
  • 打赏
  • 举报
回复
学习 帮你顶!
winesmoke 2006-08-15
  • 打赏
  • 举报
回复
xue xi
ytzz 2006-08-15
  • 打赏
  • 举报
回复
帮顶吧
gzwuyh 2006-08-15
  • 打赏
  • 举报
回复
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
gzwuyh 2006-08-15
  • 打赏
  • 举报
回复
我这样试过,在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
加载更多回复(11)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧