我正在尝试将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中。在
我假设您使用的Python版本早于3,并且您的字符串是一个普通的
str
。在如果您谈论的是输出,digest方法返回一个由原始字节组成的字符串。C中的等价类型是
byte[]
,您似乎已经拥有了它。它不是文本,所以使用Encoding类没有意义。在如果您谈论的是输入,
md5
函数接受一个普通的str
,它是一个字节串。在此之前,您必须先查看代码,以确定数据的编码方式。在编辑:
关于您发布的代码,它所做的就是将哈希中前六个字节的值相加。您应该能够在C中找到如何做到这一点。在
并确保您了解字符串字节和字符字符串之间的区别。在
根据the documentation,Python字符串默认为ASCII。替代编码必须是explicitly specified。因此,您应该能够将ASCII字符串传递到C#MD5库,并获得与将字符串传递给pythonmd5库相同的哈希字节。在
它根本不是编码的,它只是两种语言的字节数组。在
相关问题 更多 >
编程相关推荐