2

我正在尝试将 python 程序移植到 c#。这是应该是一个演练但目前正在折磨我的行:

hash = hashlib.md5(inputstring).digest()

在 c# 中生成类似的 MD5 哈希之后,创建一个与原始 python 程序类似的哈希字符串是绝对重要的,否则我的整个应用程序将失败。

我的困惑在于在 c# 中转换为字符串时使用哪种编码,即

?Encoding enc = new ?Encoding();
string Hash =enc.GetString(HashBytes); //HashBytes is my generated hash

因为我在使用 Encoding.Default 时无法创建两个相似的哈希值,即

string Hash = Encoding.Default.GetString(HashBytes);

所以我想知道 python 的默认 hash.digest() 编码会有所帮助

编辑

好吧,也许更多的代码会更多地表达我的问题。在python程序中计算哈希后,会进行一些计算,即

hash = hashlib.md5(inputstring).digest()

for i in range(0,6):

value += ord(hash[i])

return value

现在你能明白为什么两个不同的 Hash 字符串会有问题了吗?运行 python 程序时出现的一些字符被替换为“?” 在 C# 中。

4

3 回答 3

5

我假设您使用的是比 3 更早的 Python 版本,并且您的字符串是普通的str.

如果您在谈论输出,则摘要方法返回一个由原始字节组成的字符串。C# 中的等效类型是byte[],您似乎已经拥有了。它不是文本,所以使用 Encoding 类没有意义。

如果您在谈论输入,则该md5函数接受一个 normal str,它是一个字节字符串。在此之前,您必须查看代码以确定数据的编码方式。

编辑:

关于您发布的代码,它所做的只是获取哈希中前六个字节的值并将它们加在一起。您应该能够弄清楚如何在 C# 中做到这一点。

并确保您了解一串字节和一串字符之间的区别。

于 2010-06-03T20:32:43.830 回答
2

它根本没有编码,它只是两种语言的字节数组。

于 2010-06-03T20:27:36.773 回答
0

根据文档,Python 字符串默认为 ASCII。必须明确指定备用编码。因此,您应该能够将 ASCII 字符串传递给 C# MD5 库并获得与将字符串传递给 Python MD5 库相同的哈希字节。

于 2010-06-03T20:38:46.100 回答