`openssl digest | head -c 10` 给出了奇怪的结果

`openssl digest | head -c 10` 给出了奇怪的结果

我正在使用一些容易记住的单词的加盐哈希作为匿名帐户的登录名/密码,刚才我注意到有时我的方法没有得到结果,然后我发现它从一开始就无法正常工作。我所做的是:

pc ~ % echo "A simple string." | openssl sha512 | head -c 10
(stdin)= f%

令我惊讶的是,在 Linux 和 Mac 上的 bash 和 zsh 中,这只给出一个字符,而不是 10 个。所有head -c-ed 哈希都是随机长度,但head -n 1可以正确打印整个字符串:

pc ~ % echo "A simple string." | openssl sha512 | head -n 10
(stdin)= f261768808d0b30162a8e412b3195ad1aa0fa21dfcf67968dd9f5050e919eee6bbbc2ce8845d80cb4930b478407e28e7d9f0d5750cbe069f17de5eff52060e54

也许它使用了线程,存在编码问题,或者我只是不了解 stdio 管道,但我该如何修复这个错误?它应该只打印一个修剪为固定长度的任意散列字符串。我也只是好奇这种行为的原因。

答案1

好吧,我真的很笨。前缀(stdin)=也是管道字符串的一部分。如果有人需要删除它,请参阅https://unix.stackexchange.com/questions/42797/openssl-dgst-sha1-ducing-an-extraneous-stdin-prefix-and-trailing-new

相关内容