如何在 cli 上获取 Base64 编码的 shaX?

如何在 cli 上获取 Base64 编码的 shaX?

sha1sum输出实际 sha 的十六进制编码格式。我想查看 Base64 编码的变体。可能有一些命令输出我可以通过管道传输的二进制版本,如下所示:echo -n "message" | <some command> | base64或者如果它直接输出它也很好。

答案1

如果您有命令行实用程序开放式SSL,它可以生成二进制形式的摘要,甚至可以转换为 base64(在单独的调用中)。

printf %s foo | openssl dgst -binary -sha1 | openssl base64 -A

-sha256-sha512等也受支持。

答案2

由于sha1sum不提供二进制输出选项,您可能需要找到一个与它们相反的实用程序od并通过管道传输它们。根据 fschmitt 的建议,与“reverse”和“plain dump”标志一起使用,xxd它将如下所示:

sha1sum | cut -f1 -d\ | xxd -r -p | base64

答案3

我不完全确定我明白你想要什么,但我认为类似以下的内容应该有效:

$ echo -ne "$(echo -n "message" | sha1sum | cut -f1 -d" " | sed -e 's/\(.\{2\}\)/\\x\1/g')" | base64

基本上,我获取十六进制输出,使用sed它使其成为转义十六进制值的字符串,然后使用echo -en将字节回显到base64.

我们可以通过以下练习确认最终输出对应于相同的哈希值:

$ echo -n "message" | sha1sum 
6f9b9af3cd6e8b8a73c2cdced37fe9f59226e27d  -

$ echo -ne "$(echo -n "message" | sha1sum | cut -f1 -d" " | sed -e 's/\(.\{2\}\)/\\x\1/g')" | base64
b5ua881ui4pzws3O03/p9ZIm4n0=

$ echo -n "b5ua881ui4pzws3O03/p9ZIm4n0=" | base64 -d | xxd
0000000: 6f9b 9af3 cd6e 8b8a 73c2 cdce d37f e9f5  o....n..s.......
0000010: 9226 e27d                                .&.}

目视检查显示我们的 base64 值与原始十六进制匹配。请注意,如果您使用hexdump而不是xxd您可能需要稍微调整一下格式设置才能获得您期望的输出。

答案4

Base64 编码的 SHA256 哈希成为相当标准的文件校验和开放BSD-b最近..只需在 OpenBSD sha256(或 sha1、sha512)命令中添加选项即可完成:

$ FILE=/dev/null
$ sha256 -q -b $FILE
47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=

或者:

$ cksum -q -a sha256b $FILE

相关内容