SHA256哈希计算

格本·兰帕特(Gerben Rampaart)

对于我的雇主,我必须向网络应用程序的客户提供他们下载的某些文件的校验和。

我想向用户展示他们的客户端工具也可能生成的哈希,因此我一直在比较在线哈希工具。我的问题是关于哈希的形式,因为它们之间的差异非常奇怪。

快速搜索后,我用5进行了测试:

  1. http://www.convertstring.com/Hash/SHA256
  2. http://www.freeformatter.com/sha256-generator.html#ad-output
  3. http://online-encoder.com/sha256-encoder-decoder.html
  4. http://www.xorbin.com/tools/sha256-hash-calculator
  5. http://www.everpassword.com/sha-256-generator

输入值“ test”(在其后没有“ enter”)都将给我5个相同的SHA256结果。但是,这里开始特殊的事情,当我输入值“ test [enter] test”(所以有两行)时,在线工具1、2和3给我相同的SHA256哈希,而站点4和5给我一个不同的哈希值(因此1、2和3相等,而4和5相等)。这很可能与工具或底层代码处理\ r \ n的方式有关,或者至少我认为如此。

巧合的是,站点1,站点2和站点3给我呈现的哈希值与我的C#代码相同:

    var sha256Now = ComputeHash(Encoding.UTF8.GetBytes("test\r\ntest"), new SHA256CryptoServiceProvider());

    private static string ComputeHash(byte[] inputBytes, HashAlgorithm algorithm)
    {
        var hashedBytes = algorithm.ComputeHash(inputBytes);
        return BitConverter.ToString(hashedBytes);
    }

问题是:哪些网站是“正确的”?

有没有办法知道哈希是否符合标准?

UPDATE1:将编码更改为UTF8。但是,这对创建的输出哈希没有影响。谢谢@Hans。(因为我的Encoding.Default可能是Encoding.UTF8)

UPDATE2:也许我应该扩大问题的范围,因为它可能无法被解释,对不起。我想我要问的更多是可用性问题,而不是技术问题。我是否应该提供所有具有不同行尾的哈希值?还是我应该坚持一个?客户可能会致电我的公司,担心他们的文件如果以不同的方式计算哈希值,则会因某种原因而更改。通常如何解决?

ken2k

所有这些站点都返回有效值。

站点4和5\n用作换行符。


编辑

我看到您编辑了问题以添加Encoding.Default.GetBytes到代码示例中。

这很有趣,因为计算散列之前,您会看到有一些string to byte array conversion要运行的东西。换行()以及文本编码都是解释字符串以获取不同字节值的两种方式\n\r\n

一旦具有与输入相同的字节,所有哈希结果将是相同的。


编辑2:

如果直接处理字节,则只需使用这些字节计算哈希即可。不要尝试提供不同的哈希值;哈希只能返回一个值如果您的客户的哈希值与您的哈希值不同,那么他们做错了

话虽这么说,我很确定它永远不会发生,因为没有任何方法可以误解字节数组。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章