我目前正在进行一个将Python 3.2程序转换为C#的项目。
在Python程序中,有一行代码会返回一个双倍长度的字符串对象,只包含十六进制数字。
Python程序中的这段代码如下:
if sha1.hexdigest().upper() == hash_string:
#do whatever
我一直在努力寻找C#中类似于Python hashlib中hexdigest的等效方法,但没有成功。
在C#中,我已经得到了作为字节数组的SHA1哈希值,但是我尝试过的所有方法都无法提供与哈希字符串匹配的等效hexdiget结果,而这正是sha1应该匹配的结果。
我不确定问题是我用来仿真hexdigest的方法还是我首先使用的生成sha1哈希的方法,因此,如果有人有一个已知有效的hexdigest方法,那就太好了,因为这将允许我至少消除一个可能导致问题的原因。
目前我正在使用代替hexdigest的方法:
string hexaHash = "";
foreach (byte b in sha1result)
{
hexaHash += String.Format("{0:x2}", b);
}
string result = hexaHash;
编辑:捂脸好吧,我刚刚弄清楚了我的问题所在。在Python中生成sha1哈希时,它是从小写十六进制字符串中生成的。而在我的C#中,它是大写十六进制字符串。因此,我猜想我使用的等效于hexdigest的代码已经很好了。抱歉浪费了大家的时间。
localValue.ToUpper() == externalValue.ToUpper()
。 - sll