如何在C#中获取SHA3-512哈希?HashLib结果与在线工具不符
解决SHA3-512哈希结果与在线工具不一致的问题
嘿,这个问题我之前也碰到过!核心原因是你混淆了Keccak和最终标准化的SHA3算法——虽然SHA3脱胎于Keccak,但NIST在标准化时调整了填充规则,导致两者对同一输入生成的哈希值完全不同。你当前代码调用的是CreateKeccak512(),而在线工具计算的是标准SHA3-512。
直接修改代码即可解决
把代码里的CreateKeccak512()换成HashLib提供的标准SHA3-512实现CreateSHA3_512(),就能得到和在线工具一致的结果:
using HashLib; using System; class Program { static void Main(string[] args) { // 改用标准SHA3-512实现 var sha3512 = HashFactory.Crypto.SHA3.CreateSHA3_512(); var tempHash = sha3512.ComputeString("test"); Console.WriteLine(tempHash.ToString().ToLower().Replace("-", "")); } }
补充:为什么会有差异?
原始Keccak和标准SHA3的核心区别在于填充方式:
- Keccak使用的是
0x01后缀的填充规则 - 标准SHA3则采用
0x06后缀的填充规则(这是NIST在标准化Keccak为SHA3时做的关键调整)
这一点点填充差异就会导致最终哈希值完全不同,所以只要切换到专门的SHA3-512实现,就能匹配在线工具的计算结果啦。
内容的提问来源于stack exchange,提问作者Apepenkov
相关产品推荐
相关产品推荐

