2012-02-06 35 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#想要什么,而不是移植整个库做你想要什么有问题。