我创建了一个文件并在其中输入了一些随机字符串。
touch tesseract && echo 'TestTestTestTestTest' > tesseract
现在,如果我使用openssl
计算base64
哈希[sha256
],我就会运行:
cat tesseract | openssl dgst -sha256 | openssl base64 -A
返回我
KHN0ZGluKT0gMzJjYjA1MTgzNDNhZmY2N2FlMmY5YzUwNDcwNGRiNGE5Njc5MzIyZWVlNTBmMjBiNTMzNjZlYTBiMDY2MWNlZgo=
现在我逐步处理这个哈希值,
cat tesseract | openssl dgst -sha256 > partialHash
给了我
(stdin)= 32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef
让此哈希为X
。
然后我这样做,
echo '32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef' > partialHash
cat partialHash | openssl base64 -A
我得到了不同的结果。那是为什么?
我问的原因是因为我使用二进制文件hashdeep
,它以32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef
的形式提供哈希值,我希望将它们转换为base64
编码格式为{{1} }无法生成hashdeep
输出。所以我将中间哈希管道传递给base64
,但获得了不同的结果。
我错过了什么?如何将非编码哈希openssl base64 -A
[X
]转换为正确的32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef
编码格式?
为简单起见,我们可以假设文件中存在base64
,使用X
答案 0 :(得分:4)
你不是base-64编码哈希。你是对字符串
进行base64编码的(stdin)= 32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef
(后跟换行符)。请注意开头的(stdin)=
。这是字符串的一部分。这将具有与字符串32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef
的base64编码不同的值(后跟换行符)。
如果您的目标是获取二进制哈希值(而不是字符串编码),请使用-binary
选项openssl dgst
。
我不熟悉hashdeep
,但当你说“非编码哈希”时,这并不是它产生的。它正在生成十六进制编码的哈希。从它的外观来看,你真的在寻找一个hex-to-base64转换器。你可以这样做:
echo '32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef' | xxd -r -p | base64
xxd -r -p
将十六进制编码的字符串转换为原始数据。
(如果您使用的是openssl dgst
,请确保您使用的是前端未注入(stdin)=
的选项。我的openssl版本不会这样做,所以我我不确定你需要什么旗帜。)