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

Compute base64 encoded hash from a given hash?

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

touch tesseract && echo 'TestTestTestTestTest' > tesseract

现在,如果我使用 openssl 来计算 base64 散列 [sha256],我 运行 这个:

cat tesseract | openssl dgst -sha256 | openssl base64 -A

哪个returns我

KHN0ZGluKT0gMzJjYjA1MTgzNDNhZmY2N2FlMmY5YzUwNDcwNGRiNGE5Njc5MzIyZWVlNTBmMjBiNTMzNjZlYTBiMDY2MWNlZgo=

现在我逐步处理这个散列,

cat tesseract | openssl dgst -sha256 > partialHash

这给了我

(stdin)= 32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef

让这个散列为X。 然后我这样做,

echo '32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef' > partialHash
cat partialHash | openssl base64 -A

我得到了不同的结果。这是为什么?

我问的原因是因为我使用二进制 hashdeep 它以 32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef 的形式给我散列,我希望将它们转换为 base64 编码格式作为 hashdeep 无法产生 base64 输出。所以我将中间散列通过管道传输到 openssl base64 -A,但得到了不同的结果。

我错过了什么?如何将未编码的散列 X [即 32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef] 转换为正确的 base64 编码格式?

为简单起见,我们可以假设 X 存在于文件中,
使用 echo '32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef' > file

创建

您没有对哈希进行 base-64 编码。您正在对字符串进行 base64 编码

(stdin)= 32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef

(后跟一个换行符)。注意开头的 (stdin)= 。那是字符串的一部分。这将具有与字符串 32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef(后跟换行符)的 base64 编码不同的值。

如果您的目标是获取二进制哈希值(而不是它们的字符串编码),则使用 -binary 选项 openssl dgst

我不熟悉 hashdeep,但是当您说 "non-encoded hash," 时,它并不是这样生成的。它正在生成一个十六进制编码的哈希值。从外观上看,您确实在寻找十六进制到 base64 的转换器。您可以按照以下方式进行操作:

echo '32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef' | xxd -r -p  | base64

xxd -r -p 将十六进制编码的字符串转换为原始数据。

(如果您使用 openssl dgst,请确保您使用的选项不会在前面注入 (stdin)=。我的 openssl 版本不会这样做,所以我不确定你需要什么标志。)