字节字符串在 Python 和 C# 中是相同的,但 MD5 哈希码是不同的

本文关键字:MD5 是不同 哈希码 字符串 Python 字节 | 更新日期: 2023-09-27 17:56:32

我想从字符串中生成哈希代码,例如"咖啡",但是我从python和c#得到的哈希代码是不同的,来自python的哈希代码是我想要

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])

二进制字符串在 C# 和 Python 中都是 E5 92 96 E5 95 A1

MD5 哈希码

(c#)a761914f9760af3c112e24f08dea1b16

(python)3b7daa58a1fecdf5ba4d94d539fbb4d5

字节字符串在 Python 和 C# 中是相同的,但 MD5 哈希码是不同的

字符串编码可能不同;因此,当您将字符串转换为 byte[] 时,您可能会得到不同的值。尝试打印它们以查看它们是否相同。

有同样的问题。能够将文本编码为"UTF-16LE",C#和Python都产生了相同的结果。

def getMD5(text):
    encoding = text.encode("UTF-16LE")
    md5 = hashlib.md5()
    md5.update(encoding)
    return md5.hexdigest()