C#中与Python 3.2中的hexdigest相等的是什么?

10

我目前正在进行一个将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的代码已经很好了。抱歉浪费了大家的时间。


1
在比较来自外部系统的字符串时,始终确保两者都是大写的,因为大小写可能会在外部系统中改变,导致代码失败,所以始终执行 localValue.ToUpper() == externalValue.ToUpper() - sll
1
Dup - https://dev59.com/JVHTa4cB1Zd3GeqPOAqd - Micah Armantrout
2个回答

10
var hmac = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();

3
使用HMACSHA1类进行转换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接