2012-02-06 77 views
0

我想端口hashlib庫從蟒蛇到C#:如何端口hashlib從蟒蛇到C#

shaA = hashlib.sha256() 
     shaA.update(yy)  
     shaA.update(xx) 
     shaB = shaA.copy() 
     hashA = shaA.digest() 

     #Hash B 
     shaB.update(yy) 
     shaA = shaB.copy() 
     hashB = shaB.digest() 

     #Hash C 
     shaA.update(xx) 
     hashC = shaA.digest() 

我的問題是,我真的不知道是指SHA256方面有什麼更新()()在.NET中,還有副本(.NET中的SHA256不支持)和摘要。

如果有人能幫助我與,我會很感激之餘!

謝謝

回答

3

我認爲 - 不知道,沒有測試 - 你的示例代碼大致相當於此:

byte[] hashA, hashB, hashC; 

using (var sha = new SHA256Managed()) 
{ 
    hashA = sha.ComputeHash(Encoding.UTF8.GetBytes(yy + xx)); 
    hashB = sha.ComputeHash(Encoding.UTF8.GetBytes(yy + xx + yy)); 
    hashC = sha.ComputeHash(Encoding.UTF8.GetBytes(yy + xx + yy + xx)); 
} 

各種Python方法在the hashlib documentation解釋。

copy使得哈希對象的當前狀態的克隆; update將新字符串追加到散列對象的現有輸入字符串; digest從哈希對象的現有輸入字符串生成哈希(又名消息摘要),並將其作爲字節序列返回。

沒有等價物,我所知道的.NET或C#。說實話,在移植hashlib時似乎沒有多大價值。在我看來,使用內置的.NET哈希庫爲您提供了更簡短易懂的代碼。

+0

哈希庫內建導致非常醜陋的代碼在我的經驗。具有'update'和'digest'方法看起來比.net等效的更清潔的IMO。並且解決缺少副本(如果您需要該功能)可能也非常昂貴。 – CodesInChaos 2012-02-06 13:50:26

+0

@CodeInChaos你沒聽說過抽象嗎?與移植整個圖書館相比,它仍然少得多。 – 2012-02-07 13:39:11

+1

@the_drow我沒有說移植圖書館是個好主意。但是我覺得很奇怪,LukeH說:「在我看來,使用內置的.NET哈希庫爲您提供更短,更易於理解的代碼。」這與我的經驗不符。對應於上面的python代碼的.net代碼是*很*醜。但是,解決這個問題的正確方法當然是一些輔助方法,而不是Python中的完整庫端口。 – CodesInChaos 2012-02-07 13:58:06

0

你知道.NET框架包含一個加密庫嗎?
這裏的SHA256實施.NET。 This是密碼學庫的一個很好的概述。

如果您使用的是.NET加密庫也許你應該看看是否有某種方式來實現在C#想要什麼,而不是移植整個庫做你想要什麼有問題。