我正在尝试获取一个字符串的 md5 哈希值。该字符串仅由大写字母、小写字母和数字组成。没有其他字符,包括空格和换行符。该字符串是通过键盘输入的,而不是通过文件输入,因此不存在 BOM 或其他标志。
如果我在本地运行使用,md5sum
我会得到以下输出:
ubuntu@ubuntu:~$ echo word | md5sum
a46ec67a0f2e7c387926ac5d783ea4b8 -
ubuntu@ubuntu:~$ echo "word" | md5sum
a46ec67a0f2e7c387926ac5d783ea4b8 -
ubuntu@ubuntu:~$ echo "word" -n | md5sum
3a21ca21563e9535a9012daef61a0bdf -
我知道上面第二个和第三个输出之间的区别是由于缺少换行符(。(结果并非如此!请参阅接受的答案。)-n
)。这部分我很清楚
然而,有些工具会给出第三种结果。所有非 CLI 工具似乎都给出了相同结果,这就是让我困惑的地方:
- http://www.miraclesalad.com/webtools/md5.php说是的
c47d187067c6cf953245f128b5fde62a
。 - http://www.md5hashgenerator.com/说是的
c47d187067c6cf953245f128b5fde62a
。 - http://www.md5.cz/说是的
c47d187067c6cf953245f128b5fde62a
。 - http://www.md5online.org/md5-encrypt.html说是的
c47d187067c6cf953245f128b5fde62a
。 - http://md5-hash-online.waraxe.us/说是的
c47d187067c6cf953245f128b5fde62a
。 - 这款 Android 应用说是的
c47d187067c6cf953245f128b5fde62a
。 echo -n "word" | unix2dos | md5sum
给我c47d187067c6cf953245f128b5fde62a
。
这里发生了什么?
答案1
$ echo "word" -n | md5sum
3a21ca21563e9535a9012daef61a0bdf -
$ echo "word -n" | md5sum
3a21ca21563e9535a9012daef61a0bdf -
$ echo "-n" word | md5sum
c47d187067c6cf953245f128b5fde62a -
具体而言,请注意:
$ echo "word" -n
word -n
所有选项都必须位于非选项参数之前。除了某些 GNU 实用程序之外,大多数程序都是如此,并且所有 的实现都是如此echo
(echo
但特殊之处在于,大多数以 开头的字符串-
都被解释为参数,只有少数选项被识别为参数)。