>我创建了一个文件并在其中输入了一些随机字符串。
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版本没有这样做,所以我不确定你需要什么标志。