我想從一個字符串生成哈希碼,例如「咖啡」,但我從python和c#得到的哈希碼是不同的,python就是我想要的python和c#中的字節字符串是相同的,但md5哈希碼是不同的
C#
String str = "咖啡";
MD5 m = MD5.Create();
byte[] data = m.ComputeHash(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 hash code
Response.Write(sbuilder.ToString());
//binary string
Response.Write(hex_builder.ToString());
蟒蛇
#coding:utf8
str = '咖啡'
m = hashlib.md5()
m.update(str)
#md5 hashcode
print m.hexdigest()
#binary string
print ' '.join(["%02x"%ord(x) for x in str])
二進制字符串是E5 92 96 E5 95 A1無論是在C#和python
MD5哈希碼:
(C#)a761914f9760af3c112e24f08dea1b16
(蟒)3b7daa58a1fecdf5ba4d94d539fbb4d5
c#將一個字節數組傳遞給ComputeHash,而python update包含字符串。你可以在Python中創建一個字節數組並將其傳遞給'update'? – russau 2011-05-17 07:57:18
僅供參考 - 我剛剛在我的電腦上運行你的python代碼(python 2.5),並且我得到了'a761914f9760af3c112e24f08dea1b16'作爲散列 - 雖然我必須刪除#coding:utf8 – russau 2011-05-17 08:08:35