从给定的哈希值计算 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 版本不会这样做,所以我不确定你需要什么标志。)
我创建了一个文件并向其中输入了一些随机字符串。
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 版本不会这样做,所以我不确定你需要什么标志。)