9

我目前正在开发一个将 Python 3.2 程序转换为 C# 的项目。

在 python 程序中有一行代码返回一个双倍长度的字符串对象,只包含十六进制数字。

Python程序中的代码是:

if sha1.hexdigest().upper() == hash_string:
    #do whatever

我一直在尝试并未能从 python 中的 hashlib 中找到 C# 中的 hexdigest 等价物。

在 C# 中,我已经在一个字节数组中获得了 SHA1 哈希,但是我尝试执行等效于 hexdigest 的所有方法都未能提供与 hash_string 的匹配 - 这是 sha1 的 hexdigest应该匹配的。

我不确定问题是我用来模拟 hexdigest 的方法还是我用来首先生成 sha1 哈希的方法 - 所以如果有人有他们知道的 hexdigest 方法,那就太好了这将允许我消除至少一个可能的问题原因。

我目前用来代替 hexdigest 的方法是:

string hexaHash = "";
foreach (byte b in sha1result)
{
    hexaHash += String.Format("{0:x2}", b);
}
string result = hexaHash;

编辑:facepalm好的,我刚刚弄清楚我的问题是什么。在 python 中生成 sha1 哈希时,它是从小写的十六进制字符串中进行的。在我的 C# 中,它是一个大写的十六进制字符串。所以我猜想我正在使用的hexdigest等价物是好的。很抱歉浪费了人们的时间。

4

2 回答 2

9
var hmac = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
于 2016-12-13T07:07:56.543 回答
3

使用 HMACSHA1 类对其进行转换。

于 2012-04-14T08:42:44.017 回答