通过 fxxd -p 管道传输的 openssl sha256 二进制摘要在多行上输出

openssl sha256 binary digest piped through fxxd -p is output on multiple lines

我使用这个命令给我 openssl 的输出,没有 (stdin)= 开头。

openssl x509 -noout -modulus -in certfile.crt | openssl sha1 -binary | xxd -p

有输出

7857b35259019acc7484201958ac7e622c227b68

如果我更改 openssl 以创建 sha256 摘要,xxd 会将其打印成两行

openssl x509 -noout -modulus -in certfile.crt | openssl sha256 -binary | xxd -p

有输出

b274c19ac31cc7893dc2297804a2ca666fe168d5cd5eb4d4b6c47616bad9
8996

如何在第一行写输出?

b274c19ac31cc7893dc2297804a2ca666fe168d5cd5eb4d4b6c47616bad98996

既然摘要更长了,还是我需要用 xxd 做其他事情,或者是否需要通过其他命令将其通过管道传输以获得组合输出?

和往常一样,有几种方法。 我想到的第一个通用解决方案是:

printf "%s" $( openssl x509 -noout -modulus -in certfile.crt | openssl sha256 -binary | xxd -p )

当然,如果输出小于256,你可以使用tshiono所说的xxd -f -c 256

针对 openssl 这种特殊情况的另一种解决方案是:

openssl x509 -noout -modulus -in certfile.crt | openssl sha256 -r

openssl x509 -noout -modulus -in certfile.crt | openssl sha256 -hex

但两者都不完全像您想要的输出。十六进制字符串在输出中,但在可以 cut 之前或之后填充,通过管道连接到命令 cut -d" " -f 1cut -d" " -f 2 以删除前缀或后缀。