我目前正在开发一个将Python 3.2程序转换为C#的项目。
在python程序中有一行代码,它返回一个双倍长度的字符串对象,只包含十六进制数字。
Python程序中的一些代码是:
if sha1.hexdigest().upper() == hash_string:
#do whatever
我一直在尝试并且未能在python中的hashlib中找到C#of hexdigest中的等价物。
在C#中我已经在一个字节数组中得到了SHA1哈希,但是我试图执行相当于hexdigest的所有方法都无法提供与hash_string的匹配 - 这就是sha1的十六进制< em>应匹配。
我不确定这个问题是我用来模拟hexdigest的方法还是我用来生成sha1哈希的方法 - 所以如果有人有一个hexdigest方法,它会很棒 know 可以帮助我消除问题的至少一个可能原因。
我现在使用的方法代替hexdigest:
string hexaHash = "";
foreach (byte b in sha1result)
{
hexaHash += String.Format("{0:x2}", b);
}
string result = hexaHash;
编辑: facepalm 好吧,我刚刚解决了我的问题所在。在python中生成sha1哈希时,它是从小写的十六进制字符串中进行的。在我的C#中,它是一个大写的十六进制字符串。所以我猜我正在使用的hexdigest等价物就好了。很抱歉浪费了人们的时间。
答案 0 :(得分:4)
var hmac = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
答案 1 :(得分:2)
使用HMACSHA1类进行转换。