.NET 6控制台应用Keccak256哈希结果与预期不符问题求助
问题分析与解决
错误根源
你将十六进制字符串转成字节数组后,又通过Convert.ToHexString(ba)转回了十六进制字符串,接着调用shaKec.CalculateHash(hex)时,Nethereum的该方法会把输入的字符串当成普通文本(按UTF-8编码转换为字节)计算哈希——这和在线工具选择TEXT模式的行为完全一致,自然得不到HEX模式下的正确结果。
修正方案
直接对转换后的字节数组计算Keccak256哈希,而非转回字符串。修正后的Main方法代码如下:
static void Main () { string str = "DF4566150FEE083F2A956B8666E666CD8AB6DC6A05A0D8722EDD8E175BD83FF662B0088FE94B03C5F1FD881B7CB522AE2AE0C19CC9BB4969EC702C7016C6D887"; Sha3Keccack shaKec = new Sha3Keccack(); byte[] ba = StringToByteArray(str); // 直接对原始字节数组计算哈希,再转为十六进制字符串输出 string kec = shaKec.CalculateHash(ba).ToHexString(); Console.WriteLine(kec); }
修改后,代码会直接处理十六进制对应的原始字节数据,和在线工具选择HEX模式的逻辑一致,运行后即可得到预期结果:53DB7117947F19F22349D28908B79CB67FF2E0D7A15D2721C49AB05B5287F315。
内容的提问来源于stack exchange,提问作者user3410566
相关产品推荐
相关产品推荐

