2012-04-05 48 views
5

我目前正在从事一个将Python 3.2程序转换为C#的项目。在Python 3.2中,C#等价于十六进制数?

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

的代码在Python程序中的位是:

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

我一直在尝试和失败,以找到在Python中hashlib在hexdigest的C#等效。

在C#中,我已经在字节数组中获得了SHA1哈希,但是我试图执行相同的十六进制的所有方法都未能提供与hash_string的匹配 - 这是sha1的十六进制数应该与相符。

我不确定问题是我用来模拟十六进制的方法还是我用来生成sha1哈希的方法 - 所以如果有人使用了十六进制方法,他们知道的作品,这将使我能够消除至少一个可能的问题的原因。

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

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

编辑:捂脸没关系,我只是工作了我的问题是什么。当在python中生成sha1哈希时,它使用小写的十六进制字符串来完成它。在我的C#中,它是一个大写的十六进制字符串。所以我猜想我使用的最简单的等价物很好。对不起浪费人们的时间。

+1

总是时来自外部系统的比较字符串保证双方都是大写的,因为情况下,可以在外部系统和代码将无法最终改变,所以总是做'localValue.ToUpper()== externalValue.ToUpper( )' – sll 2012-04-05 15:48:31

+1

Dup - http://stackoverflow.com/questions/3899644/convert-python-to-c-sharp – 2012-04-05 15:48:38

回答

3

使用HMACSHA1类将其转换。

+1

一些代码将会很好...漂亮请! – noelicus 2016-08-22 16:59:09

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