为什么Bash的sha256sum结果与Erlang的crypto:hash(sha256)结果不一致?
哈希结果不一致的原因说明
核心原因是两个场景计算哈希的原始输入不一致:
- Bash中默认的
echo命令会在输出内容末尾自动追加换行符\n,你执行echo a | sha256sum时,实际参与哈希计算的内容是a\n,而非单独的字符a - Erlang代码中传入
crypto:hash的输入是纯字符a,没有额外的换行符,所以计算出来的哈希结果自然不同
验证方案1:调整Bash命令匹配Erlang计算结果
给echo增加-n参数,禁止自动追加换行:
echo -n a | sha256sum
输出结果为ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb -,和Erlang转换得到的十六进制结果仅大小写不同,属于同一份哈希的不同表示格式,完全等价。
验证方案2:调整Erlang输入匹配原Bash命令结果
给Erlang的输入内容末尾追加换行符\n:
Bin = crypto:hash(sha256, "a\n"). bin_to_hex:bin_to_hex(Bin).
转换得到的十六进制结果就是你原Bash命令输出的87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7。
补充说明:十六进制结果的大小写差异仅为转换逻辑的输出格式不同,不影响哈希值的正确性,如果需要统一格式,调整bin_to_hex的实现逻辑输出小写字符即可。
内容的提问来源于stack exchange,提问作者Gradie Mayombe
相关产品推荐
相关产品推荐

