Openssl 如何在终端将十六进制哈希转换为二进制?
主要问题:如何使用Openssl 如何在终端将十六进制哈希转换为二进制?,openssl,binaryfiles,hexdump,xxd,Openssl,Binaryfiles,Hexdump,Xxd,主要问题:如何使用xxd-r? 次要细节。此命令输出十六进制哈希: openssldgst-sha256 myFile | awk'{print$2}>myHashHex 我想myHashHex是一个“hextump”,不是吗我以为xxd-rmyHashBin 因此,我期望xxd-rnewHashBin生成newHashBin=myHashBin PS:to测试。现实生活中的问题是使用sha256sum维护所有数据,并且仅在一个过程中将其转换为双sha256 相反,我使用的是openssl
xxd-r
?
次要细节。此命令输出十六进制哈希:
openssldgst-sha256 myFile | awk'{print$2}>myHashHex
我想myHashHex
是一个“hextump”,不是吗我以为
xxd-r
会转换成。。。嗯,它不起作用
笔记 测试/比较。我认为这在二进制中是相同的(没有标题):
openssldgst-sha256-binary myFile>myHashBin
因此,我期望xxd-rnewHashBin
生成newHashBin=myHashBin
PS:to测试。现实生活中的问题是使用sha256sum维护所有数据,并且仅在一个过程中将其转换为双sha256 相反,我使用的是
openssl dgst-sha256-binary myFile | openssl dgst-sha256>myDoubleHash
我将使用两个步骤:
openssl dgst-sha256 myFile | awk'{print$2}>myHashHex
xxd-r myHashHex | openssl dgst-sha256>myDoubleHash
$printf“计算机就像旧约中的神,有很多规则,没有仁慈。”| xxd
00000000:436f 6d70 7574 6572 7320 6172 6520 6c69计算机是li
00000010:6b65 206f 6c64 2074 6573 7461 6d65 6e74如旧约
00000020:2067 6f64 733b 206c 6f74 7320 6f66 2072神;大量的r
000000 30:756c 6573 2061 6e64 206e 6f20 6d65 7263不含水星
00000040:792e y。
默认情况下,xxd将创建这种类型的hextump
使用-p表示十六进制字符串
根据,-r
希望读取格式化的hexdump:
-r | -revert
reverse operation: ...
Use the combination -r -p to read plain hexadecimal
dumps without line number information and without a particular column layout.
...
重申一下,默认情况下,xxd-r
需要一个格式化的hexdump。要读取或写入带有xxd的“普通十六进制转储”,请使用-p
选项。请注意,xxd希望标志出现在参数之前,因此如果以标志结束,则会出现意外行为
验证
如果您可以看到两次运行openssl(最初使用-binary
)和使用xxd运行openssl会产生相同的结果
$openssldgst-sha256 myHashHex;
$xxd-r-p myHashHex | openssl dgst-sha256
(标准DIN)=61f417374f4400b47dcae1a8f402d4f4dacf455a0442a06aa455a447b0d4e170
$openssl dgst-sha256-二进制