从给定哈希计算 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因为hashdeep无法产生base64输出。所以我通过管道将中间哈希传输到openssl base64 -A,但得到不同的结果。

我错过了什么?如何将非编码哈希X [32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef] 转换为正确的base64编码格式?

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

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

(stdin)= 32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef

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

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

我不熟悉hashdeep,但是当您说"非编码哈希"时,这不是它生成的。它正在生成一个十六进制编码的哈希。从外观上看,您真的在寻找一个十六进制到 base64 转换器。您可以按照以下思路执行此操作:

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

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

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

最新更新