Linux下如何计算字符串的32字节SHA256哈希值?
Linux下计算字符串的32字节SHA256哈希(与openssl文件计算结果一致)
要得到和openssl dgst -sha256 str.txt完全一致的32字节二进制SHA256哈希,核心是保证输入字符串的字节内容和文件str.txt完全匹配(比如是否包含末尾换行),再通过工具输出二进制结果,以下是两种可行方法:
方法1:直接用openssl生成二进制哈希
如果你的目标字符串是str,且str.txt中仅包含该字符串(无末尾换行),执行:
printf "str" | openssl dgst -sha256 -binary
printf "str":精确输出字符串,避免echo默认添加的换行符(如果str.txt是带换行的,改成printf "str\n"即可)-binary参数:让openssl输出32字节的二进制哈希,而非默认的十六进制字符串- 若要保存结果到文件,追加
> hash.bin
如果需要验证结果和文件计算一致,可将二进制转成十六进制对比:
# 字符串计算的十六进制结果 printf "str" | openssl dgst -sha256 -binary | xxd -p # 文件计算的十六进制结果 openssl dgst -sha256 str.txt | awk '{print $2}'
方法2:用sha256sum转二进制哈希
sha256sum默认输出十六进制哈希,通过以下命令将其转为32字节二进制:
printf "str" | sha256sum | cut -d' ' -f1 | xxd -r -p
sha256sum:计算字符串的十六进制哈希(输出格式为哈希值 -)cut -d' ' -f1:提取出十六进制哈希字符串xxd -r -p:将十六进制字符串反向解析为二进制字节流,得到32字节结果
同样,若str.txt包含末尾换行,把printf "str"换成printf "str\n"或echo "str"即可。
内容的提问来源于stack exchange,提问作者user20007266
相关产品推荐
相关产品推荐

