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

如何在Bash中将十六进制字符串当作十六进制字节计算SHA256哈希?

在Bash中将十六进制字符串当作字节数组计算SHA256哈希

问题背景

我有一段十六进制字符串:

6c64f463a38c670e5622f58ceccad23d8b9db5c9fc2a1717fc50015325b4764a

直接用sha256sum或openssl dgst -sha256计算时,得到的结果是:

52ad0981ad75e06084153fbe6d6e9363846b1cf14c9a84876d3504b957941fac

这是因为这些工具会把字符串当作ASCII文本转换为字节数组计算,但我需要将其直接解析为十六进制对应的字节数组来计算哈希,正确结果应该是:

4be5da7c50b521edb623936920044b1c546d3c38815ccc61c80b20fe171ff4cd

解决方法

在Bash里可以通过以下几种方式实现:

方法1:使用xxd + sha256sum

xxd工具可以将十六进制字符串转换为原始字节流,再传递给sha256sum计算:

echo -n "6c64f463a38c670e5622f58ceccad23d8b9db5c9fc2a1717fc50015325b4764a" | xxd -r -p | sha256sum
  • -n:避免echo自动添加换行符,防止干扰哈希计算结果
  • xxd -r -p:-r表示反向转换(十六进制转原始字节),-p表示使用纯十六进制格式(忽略行号等额外信息)

方法2:使用openssl直接处理

openssl支持结合解码工具处理十六进制字符串,再计算哈希:

echo -n "6c64f463a38c670e5622f58ceccad23d8b9db5c9fc2a1717fc50015325b4764a" | xxd -r -p | openssl dgst -sha256

也可以直接用openssl的编码模块解码:

echo -n "6c64f463a38c670e5622f58ceccad23d8b9db5c9fc2a1717fc50015325b4764a" | openssl enc -d -hex | openssl dgst -sha256
  • openssl enc -d -hex:直接解码十六进制字符串为原始字节流

方法3:使用printf(适合较短字符串)

利用printf的格式识别能力,把十六进制字符串转为字节:

printf "$(echo "6c64f463a38c670e5622f58ceccad23d8b9db5c9fc2a1717fc50015325b4764a" | sed 's/../\\x&/g')" | sha256sum
  • sed 's/../\\x&/g':把每两个十六进制字符替换为\xXX格式,让printf识别为对应字节

验证结果

以上方法执行后,都会得到预期的正确哈希值:

4be5da7c50b521edb623936920044b1c546d3c38815ccc61c80b20fe171ff4cd

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:45:49