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