从给定的哈希计算base64编码的哈希?

时间:2017-04-14 15:00:29

标签: linux unix hash openssl base64

我创建了一个文件并在其中输入了一些随机字符串。

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

创建

1 个答案:

答案 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版本不会这样做,所以我我不确定你需要什么旗帜。)

相关问题