2017-04-14 97 views
0

我创建了一个文件并在其中输入一些随机字符串。从给定散列计算base64编码的散列?

touch tesseract && echo 'TestTestTestTestTest' > tesseract 

现在,如果我用openssl来计算base64哈希[sha256],我运行此:

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

返回我

KHN0ZGluKT0gMzJjYjA1MTgzNDNhZmY2N2FlMmY5YzUwNDcwNGRiNGE5Njc5MzIyZWVlNTBmMjBiNTMzNjZlYTBiMDY2MWNlZgo=

现在我处理这个哈希逐步,as,

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

+0

Stack Overflow是一个编程和开发问题的网站。这个问题似乎与题目无关,因为它不涉及编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[超级用户](http://superuser.com/)或[Unix&Linux堆栈交换](http://unix.stackexchange.com/)会是一个更好的地方。另请参阅[我在哪里发布关于Dev Ops的问题?](http://meta.stackexchange.com/q/134306) – jww

回答

2

你不是基于64位编码的哈希创建。你是base64编码的字符串

(stdin)= 32cb0518343aff67ae2f9c504704db4a9679322eee50f20b53366ea0b0661cef 

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

如果您的目标是获取二进制散列(而不是其字符串编码),那么使用-binary选项openssl dgst

我不熟悉hashdeep,但是当你说“非编码散列”时,这不是它产生的。它生成一个十六进制编码的散列。从外观上看,你真的需要一个十六进制到base64的转换器。你可以这样做沿着这些路线:

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

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

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

+0

对不恰当地表述问题的道歉。感谢您理解我想问的问题。我只是试了一下,它完美地工作。我不熟悉'xxd'命令。再次感谢。 – Ozil