3

为什么执行命令后openssl sha1 < /dev/null | wc --bytes输出为50?SHA-1 的输出大小应该有 160 位,这给了我们 20 个字节。

4

2 回答 2

6

为什么输出是openssl sha1 < /dev/null | wc --bytes50?

$ openssl sha1 < /dev/null
(stdin)= da39a3ee5e6b4b0d3255bfef95601890afd80709

因为 20 字节的摘要以十六进制为前缀,(stdin)=并以十六进制表示。

于 2012-06-20T13:08:01.740 回答
2

如果您想要原始的、未格式化的字节,请将 OpenSSL 的十六进制格式输出通过管道传输到xxd -r -p,以将该表示形式转换为原始字节。

例如,要对字符串进行 Base64 编码的 SHA-1 摘要foo

$ echo "foo" | openssl sha1 | xxd -r -p | base64
8dLS+STphqyG/fezbJS83zK+7BU=

或者简单地验证消息长度:

$ echo "foo" | openssl sha1 | xxd -r -p | wc --bytes
20
于 2012-11-26T10:11:34.580 回答