【问题标题】:Compute base64 encoded hash from a given hash?从给定的哈希计算base64编码的哈希?
【发布时间】:2017-04-14 15:00:28
【问题描述】:

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

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 不能产生@ 987654339@ 输出。所以我将中间哈希传递给openssl base64 -A,但得到了不同的结果。

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

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

【问题讨论】:

标签: linux unix hash openssl base64


【解决方案1】:

您没有对哈希进行 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 版本没有这样做,所以我不确定你需要什么标志。)

【讨论】:

  • 对问题措辞不当表示歉意。感谢您理解我想问的问题。我刚试了一下,效果很好。我不熟悉xxd 命令。再次感谢。
猜你喜欢
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-02-04
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 2021-10-19
  • 2012-04-14
相关资源
最近更新 更多