![从 openssl 二进制 base64 值导出 sha1 哈希](https://linux22.com/image/1557639/%E4%BB%8E%20openssl%20%E4%BA%8C%E8%BF%9B%E5%88%B6%20base64%20%E5%80%BC%E5%AF%BC%E5%87%BA%20sha1%20%E5%93%88%E5%B8%8C.png)
数字影院包包含以下格式的校验和,如下所述这里:
$ openssl sha1 -binary 'dcpfile.xml' |openssl base64
IxcfhXNHlw+1bbDFu0kp8KRylpU=
我怎样才能获取这样的值IxcfhXNHlw+1bbDFu0kp8KRylpU=
并导出原始的 sha1 哈希值,它看起来像
$ openssl sha1 'dcpfile.xml'
SHA1(dcpfile.xml)= 23171f857347970fb56db0c5bb4929f0a4729695
我的用例是,现有的校验和验证工具并不多,它们可以让您轻松验证使用这些二进制/base64 值的 md5sum 类型校验和清单,但有许多工具可以验证 sha1,所以如果我知道如何反转这些值,那就太好了,这样我就可以编写一个脚本来生成更可互操作的哈希列表。
答案1
两个值都是相同的哈希– 相同的“二进制”字节以两种不同的编码(表示)显示,并且没有一个比另一个更“原始”。
(Base64 每个字符有 6 位;十六进制又称 base-16 每个数字有 4 位。三个原始字节、四个 Base64 数字和六个十六进制数字可以直接转换。)
几乎每种编程语言都有对这些格式进行编码/解码的函数。例如,在 shell 工具中:
要将 Base64 解码为原始二进制数据,请使用
base64 -d
或openssl base64 -d
。要将原始二进制数据编码为十六进制,请使用
xxd -p
或hexdump
。
$ echo 23171f857347970fb56db0c5bb4929f0a4729695 | xxd -r -p | base64
IxcfhXNHlw+1bbDFu0kp8KRylpU=
$ echo IxcfhXNHlw+1bbDFu0kp8KRylpU= | base64 -d | hd
00000000 23 17 1f 85 73 47 97 0f b5 6d b0 c5 bb 49 29 f0 |#...sG...m...I).|
00000010 a4 72 96 95 |.r..|