MD5 校验和不一致

MD5 校验和不一致

我正在尝试获取一个字符串的 md5 哈希值。该字符串仅由大写字母、小写字母和数字组成。没有其他字符,包括空格和换行符。该字符串是通过键盘输入的,而不是通过文件输入,因此不存在 BOM 或其他标志。

如果我在本地运行使用,md5sum我会得到以下输出:

ubuntu@ubuntu:~$ echo word | md5sum 
a46ec67a0f2e7c387926ac5d783ea4b8 - 

ubuntu@ubuntu:~$ echo "word" | md5sum
a46ec67a0f2e7c387926ac5d783ea4b8  - 

ubuntu@ubuntu:~$ echo "word" -n | md5sum
3a21ca21563e9535a9012daef61a0bdf  -

我知道上面第二个和第三个输出之间的区别是由于缺少换行符-n)。这部分我很清楚。(结果并非如此!请参阅接受的答案。)

然而,有些工具会给出第三种结果。所有非 CLI 工具似乎都给出了相同结果,这就是让我困惑的地方:

这里发生了什么?

答案1

$ echo "word" -n | md5sum
3a21ca21563e9535a9012daef61a0bdf  -
$ echo "word -n" | md5sum
3a21ca21563e9535a9012daef61a0bdf  -
$ echo "-n" word | md5sum
c47d187067c6cf953245f128b5fde62a  -

具体而言,请注意:

$ echo "word" -n
word -n

所有选项都必须位于非选项参数之前。除了某些 GNU 实用程序之外,大多数程序都是如此,并且所有 的实现都是如此echoecho但特殊之处在于,大多数以 开头的字符串-都被解释为参数,只有少数选项被识别为参数)。

相关内容