注册 登录
编程论坛 Python论坛

在c#和python查看字符串的二进制码时是相同的,但生成的md5码却不同

sidooh 发布于 2011-05-17 15:47, 1228 次点击
大家好,我用c#和python查看字符串的二进制码时是相同的,但生成的md5码却不同
测试淘宝api,python生成的md5码是正确的,c#不对

c#
程序代码:
String str = "咖啡";
MD5 m = MD5.Create();
byte[] data = (Encoding.Default.GetBytes(str));
StringBuilder sbuilder = new StringBuilder();
for(int i=0;i<data.Length;i++){
  sbuilder.Append(data[i].ToString("x2"));
}
byte[] hex = Encoding.Default.GetBytes(str);
StringBuilder hex_builder = new StringBuilder();
foreach(byte a in hex){
  hex_builder.Append("{0:x2}",a);
}
//md5码
Response.Write(sbuilder.ToString());
//二进制码
Response.Write(hex_builder.ToString());


python
程序代码:
str = '咖啡'
m = hashlib.md5()
m.update(str)
#md5码
print m.hexdigest()
#二进制码
print ' '.join(["%02x"%ord(x) for x in str])


二进制码都是e5 92 96 e5 95 a1
md5码
(c#)a761914f9760af3c112e24f08dea1b16
(python)3b7daa58a1fecdf5ba4d94d539fbb4d5

据说.net默认编码是utf16,但我在python用utf16解码时,二进制码是92e5 e596 a195(为什么两个字节一空?是两个字节作为一个byte?)
0 回复
1