2012-04-05 55 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();