You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java生成的SHA256哈希与OpenSSL、sha2工具不一致的原因

为什么Java生成的SHA256哈希和命令行工具结果不同?

这个问题其实挺常见的,根源在于命令行里的echo命令默认会在输出的字符串末尾自动添加一个换行符,而你Java代码里使用的是纯字符串"hello world"——没有额外的换行符,两者的输入内容本质上并不一致,哈希结果自然就有差异了。

具体验证和解释:

  • 你的Java代码处理的输入是:hello world(没有任何换行符)
  • 而执行echo "hello world"时,命令行实际输出的内容是:hello world\n(末尾多了一个\n换行符,不同系统可能是\r\n,但核心是多了换行)

如何让命令行结果和Java一致?

你只需要让echo不添加换行符即可,不同shell里的写法略有不同:

  • 在bash/zsh等类Unix shell中,使用-n参数:
    echo -n "hello world" | sha2 -256
    # 或者
    echo -n 'hello world' | openssl dgst -sha256
    
    执行后得到的哈希值就会和Java代码生成的完全一致:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9

额外提醒

如果是Windows的cmd或者PowerShell,echo的参数会不一样:

  • PowerShell里可以用:Write-Output -NoNewline "hello world" | openssl dgst -sha256
  • Cmd里可以用:set /p="hello world" <nul | openssl dgst -sha256

内容的提问来源于stack exchange,提问作者Nambi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:49:20