0

有人可以解释一下 hash.ComputeHash 函数在 C# .Net 中是如何工作的。

我正在尝试在 mac 服务器上的 bash 中模拟 .net hasing 程序的行为,但得到不同的结果!

.Net 代码:

 Byte[] z = System.Text.Encoding.UTF8.GetBytes("1B-F5");
 string myhash1 = BitConverter.ToString(hash.ComputeHash(z)); 
 string myhash2 = BitConverter.ToString(hash.ComputeHash(hash.ComputeHash(z)));

返回值:

myhash1 = "EF-83-00-69-6F-22-7C-1C-9C-84-C3-66-06-06-A5-12-A0-C7-91-B5"
myhash2 = "D3-5C-95-AD-2D-9E-5A-49-D0-D8-2B-4F-A5-F9-9A-6F-02-EA-8C-83"

问题是我无法在我的 bash 脚本中获得 Second has value(已被双重哈希)。

重击:

echo -n "1B-F5" | openssl sha1

但是给出正确的第一个哈希值(减去“-”字符)

echo -n "1B-F5" | openssl sha1 | openssl sha1

给出完全不同的哈希。我怀疑这是因为 C# 代码正在散列一个字节数组而不是一个字符串。

无论如何我可以在bash中获得相同的输出吗?

4

2 回答 2

2

尝试将第二个哈希步骤转换为字符串,然后对其进行哈希处理。看看你得到了什么。请记住,在此您还散列 - 八位字节分隔符。

byte[] z = System.Text.Encoding.UTF8.GetBytes("1B-F5");
string myhash1 = BitConverter.ToString(hash.ComputeHash(z)); 

z = System.Text.Encoding.UTF8.GetBytes(myhash1);
string myhash2 = BitConverter.ToString(hash.ComputeHash(z));
于 2013-01-14T16:17:52.943 回答
0

如果您将结果与在线 SHA1 工具的结果进行比较, 您会发现您正确地散列了字符串“1B-F5”。我怀疑您正在尝试散列一个两字节数组。

另一种可能性是您可能需要将第一个散列的字节数组转换为字符串并散列该字符串

于 2013-01-14T16:18:39.763 回答