如何将hashlib从Python移植到C#

0 投票
2 回答
1499 浏览
提问于 2025-04-17 12:25

我正在尝试把Python中的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()

我遇到的问题是,我不太明白在.NET中,SHA256()里的update()是什么意思,还有copy(在.NET的SHA256中不支持)和digest又是什么。

如果有人能帮我解决这个问题,我将非常感激!

谢谢

2 个回答

0

你知道吗,.NET框架里面有一个加密库。
这里有关于SHA256在.NET中的实现介绍。
这个链接提供了一个关于加密库的不错概述。

如果你在使用.NET的加密库时遇到困难,或许可以考虑找找看有没有什么方法可以用C#来实现你想要的功能,而不是把整个库都移植过来。

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方法的详细解释可以在这个hashlib文档中找到。

copy是用来复制哈希对象当前状态的;update是把一个新的字符串加到哈希对象已有的输入字符串后面;digest则是从哈希对象已有的输入字符串生成哈希值(也叫消息摘要),并把它返回为一串字节。

我知道的在.NET或C#中没有类似的东西。老实说,我觉得把hashlib移植过去并没有太大意义。使用.NET自带的哈希库可以让你的代码更简洁、更易懂。

撰写回答