当前位置: 首页 > 编程语言 > C#

SHA256哈希计算分享

时间:2023-04-10 13:38:30 C#

SHA256哈希计算对于我的雇主,我必须为客户提供一个Web应用程序,其中包含他们下载的一些文件的校验和。我想为用户提供他们的客户端工具也可能生成的哈希值,所以我一直在比较在线哈希工具。我的问题是关于它们的散列形式,因为它们是不同的,这很奇怪。快速搜索后,我测试了5个:http://www.convertstring.com/Hash/SHA256http://www.freeformatter.com/sha256-generator.html#ad-outputhttp://online-encoder.com/sha256-encoder-decoder.htmlhttp://www.xorbin.com/tools/sha256-hash-calculatorhttp://www.everpassword.com/sha-256-generator输入值'test'(没有'enterafter')所有5个都给我相同的SHA256结果。然而,奇怪的地方开始了,当我输入值“test[enter]test”(所以两行)时,在线工具1、2和3给我相同的SHA256哈希值,而站点4和5给我一个不同的哈希值(因此1、2和3相等,4和5相等)。这很可能与工具或底层代码处理rn的方式有关,或者至少我认为是这样。巧合的是,站点1、2和3给我的哈希值与我的C#代码相同:varsha256Now=ComputeHash(Encoding.UTF8.GetBytes("testrntest"),newSHA256CryptoServiceProvider());privatestaticstringComputeHash(byte[]inputBytes,HashAlgorithmalgorithm){varhashedBytes=algorithm.ComputeHash(inputBytes);返回BitConverter.ToString(hashedBytes);}问题是:哪些网站是“正确的”?有没有办法知道哈希是否符合标准?UPDATE1:将编码更改为UTF8。这对创建的输出哈希没有影响。谢谢@Hans。(因为我的Encoding.Default可能是Encoding.UTF8)更新2:也许我应该稍微扩展一下这个问题,因为它可能无法解释,抱歉。我想我问的更多是可用性问题而不是技术问题;我应该为所有散列提供不同的行尾吗?还是我应该坚持一个?客户可能会打电话给我的公司,如果他们有不同的哈希计算方法,他们会以某种方式更改他们的文件。这通常是如何解决的?所有这些站点都返回有效值。站点4和5使用n作为换行符。编辑我看到你编辑了你的问题以将Encoding.Default.GetBytes添加到代码示例中。这很有趣,因为您看到在计算哈希之前有一些字符串到字节数组的转换。换行符(n或rn)和文本编码都是将字符串解释为不同字节值的两种方式。一旦您拥有与输入相同的字节,所有哈希结果都将相同。编辑2:如果您直接处理字节,则只需计算这些字节的哈希值。不要尝试提供不同的哈希值;散列必须恰好返回一个值。如果您的客户的哈希与您的不同,则他们做错了什么。话虽如此,我很确定它永远不会发生,因为没有任何方法可以曲解字节数组。Microsoft在System.Web.Helpers命名空间中有一个名为Crypto的类,它具有开箱即用的SHA256哈希。例:以上就是C#学习教程:SHA256哈希计算分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——varplainText="Text";varhashedText=System.Web.Helpers.Crypto.SHA256(纯文本);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: