在c#和python查看字符串的二进制码时是相同的,但生成的md5码却不同
大家好,我用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?)