Python的c等价编码是什么哈希.摘要()使用?

2024-09-23 22:32:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将python程序移植到c#。下面这句话本应该是一个穿行,但现在却折磨着我:

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

在用c生成了一个类似的MD5散列之后,我必须创建一个与原始python程序类似的哈希字符串,否则我的整个应用程序将失败。在

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

^{pr2}$

因为我无法在使用时创建两个类似的哈希编码。默认值i、 e

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

所以我想知道死亡哈希.摘要()对python进行编码会有所帮助

编辑

好吧,也许更多的代码可以更清楚地说明我的问题。在python程序中计算散列之后,将执行一些计算,即

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

for i in range(0,6):

value += ord(hash[i])

return value

现在你知道为什么两个不同的哈希字符串会有问题吗?运行python程序时出现的一些字符用“?”重新计算在C中。在


Tags: 字符串程序应用程序编码stringvaluehashmd5
3条回答

我假设您使用的Python版本早于3,并且您的字符串是一个普通的str。在

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

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

编辑:

关于您发布的代码,它所做的就是将哈希中前六个字节的值相加。您应该能够在C中找到如何做到这一点。在

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

根据the documentation,Python字符串默认为ASCII。替代编码必须是explicitly specified。因此,您应该能够将ASCII字符串传递到C#MD5库,并获得与将字符串传递给pythonmd5库相同的哈希字节。在

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

相关问题 更多 >