Python的hash.digest()在C#中对应使用什么编码?
我正在把一个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
现在你能明白为什么两个不同的哈希字符串会有问题吗?在运行Python程序时出现的一些字符在C#中被替换成了'?'。
3 个回答
2
这根本没有经过编码,它只是两种语言中的一组字节数组。
5
我猜你使用的是比Python 3更早的版本,你的字符串是普通的 str
类型。
如果你说的是输出,digest方法返回的是由原始字节组成的字符串。在C#中,相应的类型是 byte[]
,你似乎已经有这个了。它不是文本,所以使用Encoding类就没什么意义了。
如果你说的是输入, md5
函数接受的是普通的 str
,也就是字节字符串。你需要查看之前的代码,弄清楚数据是什么编码的。
编辑:
关于你发布的代码,它的作用就是把哈希值的前六个字节的值加在一起。你应该能在C#中找到方法来实现这个。
另外,确保你了解字节字符串和字符字符串之间的区别。