Python的hash.digest()使用什么c#等效编码?

The*_*der 2 c# python encoding digest

我试图将python程序移植到c#.这段话应该是一个演练,但目前正在折磨我:

hash = hashlib.md5(inputstring).digest()
Run Code Online (Sandbox Code Playgroud)

在c#中生成类似的MD5哈希之后,创建一个与原始python程序类似的哈希字符串或者我的整个应用程序将失败是至关重要的.

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

?Encoding enc = new ?Encoding();
string Hash =enc.GetString(HashBytes); //HashBytes is my generated hash
Run Code Online (Sandbox Code Playgroud)

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

string Hash = Encoding.Default.GetString(HashBytes);
Run Code Online (Sandbox Code Playgroud)

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

编辑

好吧,也许更多代码会更清楚地表达我的问题.在python程序中计算散列后,执行一些计算,即

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

for i in range(0,6):

value += ord(hash[i])

return value
Run Code Online (Sandbox Code Playgroud)

现在你能看出为什么两个不同的Hash字符串会有问题吗?运行python程序时出现的一些字符由'?'重新表示 在C#中.

Mat*_*nen 5

我认为你使用的是Python的早期版本而不是3,你的字符串是正常的str.

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

如果你在谈论输入,那么md5函数会接受一个普通str的字节,这是一个字节串.在此之前,您必须先查看代码,以确定数据的编码方式.

编辑:

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

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