【发布时间】:2020-04-15 02:46:24
【问题描述】:
method1:
$echo -n "The quick brown fox jumps over the lazy dog" | openssl sha1 | base64
MmZkNGUxYzY3YTJkMjhmY2VkODQ5ZWUxYmI3NmU3MzkxYjkzZWIxMgo=
method2:
$ echo -n "The quick brown fox jumps over the lazy dog" | openssl sha1 | xxd -r -p | base64
L9ThxnotKPzthJ7hu3bnORuT6xI=
method3:
echo -n "The quick brown fox jumps over the lazy dog" | openssl sha1 | xxd -b -p | base64
MzI2NjY0MzQ2NTMxNjMzNjM3NjEzMjY0MzIzODY2NjM2NTY0MzgzNDM5NjU2NTMxNjI2MjM3MzY2NTM3CjMzMzkzMTYyMzkzMzY1NjIzMTMyMGEK
我基本上是在尝试通过 sha1 对输入字符串 The quick brown fox jumps over the lazy dog 进行校验和作为校验和,然后对结果进行 base64,我有上面两种方法,我认为 method2 是正确的答案,但我必须采取额外的步骤要通过xxd -r 和普通格式-p 将十六进制转换回二进制,然后再将其输入base64,为什么我必须做这个额外的步骤?
我在任何地方都找不到 base64 cmd 工具期望输入是二进制的?但是假设当我将其显式转换为二进制并通过mehod3 xxd -b option 将其提供给base64 时,结果再次不同。
如果使用编程语言 bcos 可能会更容易,因为我们可以完全控制但通过一些 cmd 工具会有点混乱,有人可以帮我解释一下吗?
【问题讨论】:
-
如果没有
-d选项,base64会对其输入进行编码。 -
我知道并且我没有对
base64bcos 使用任何选项,因为我只想编码。当我在上面说选项时,主要是针对xxd -
所有数据都是二进制的; text 只是表示文本编码(ASCII、UTF-8 等)的字节流。
base64和xxd,在某种意义上,以不同的方式做同样的事情:提供任意二进制数据的 ASCII 表示。 -
@chepner 是的,我知道,但我想知道 base64 cmd 工具将如何集成编码的字符串,它会假定它是字符串中的十六进制还是字符串或 ASCII 字符串中的二进制。
标签: bash openssl base64 sha xxd