Him*_*har 62 linux security bash php md5sum
我试图生成字符串“hello”的MD5总和(使用 md5sum)。我尝试了不同的方法,如 Linux 中的 md5sum 工具、PHP 的 MD5() 函数以及各种在线文本到 md5sum 转换器。
echo "hello" | md5sum
Run Code Online (Sandbox Code Playgroud)
和
echo "hello" > file && md5sum file
Run Code Online (Sandbox Code Playgroud)
给出了结果b1946ac92492d2347c6235b4d2611184。但是,PHP 的 md5() 函数和几乎所有在线生成器都给出了输出5D41402ABC4B2A76B9719D911017C592.
是什么原因?
Jon*_*nno 100
@Cyrus 的回答正好说明了如何解决这个问题 - 解释一下,当使用echo它时,它会在字符串的末尾输出一个换行符。正如您在此在线输出中看到的那样,hello换行符输出的正是您之前获得的 MD5。使用会-n抑制换行符,然后会给你你期望的结果。
编辑:
如果将其输出到hexdump,则可以清楚地看到它,它显示了那里的字节的十六进制。
$ echo "str_example" | hd
00000000 73 74 72 5f 65 78 61 6d 70 6c 65 0a |str_example.|
Run Code Online (Sandbox Code Playgroud)
请参阅字符串末尾的0a( \n)
$ echo -n "str_example" | hd
00000000 73 74 72 5f 65 78 61 6d 70 6c 65 |str_example|
Run Code Online (Sandbox Code Playgroud)
使用-necho 不会\n在最后放一个新行 ( )
现在有一个空字符串
$ echo "" | hd
00000000 0a |.|
Run Code Online (Sandbox Code Playgroud)
只是换行符
$ echo -n "" | hd
Run Code Online (Sandbox Code Playgroud)
空字符串,因此不hexdump显示输出
Cyr*_*rus 83
默认情况下,echo在输出的末尾包含一个换行符。但是,PHP 和您使用的在线站点不包括换行符。要取消换行符,请使用以下-n标志:
echo -n "hello" | md5sum
Run Code Online (Sandbox Code Playgroud)
输出:
5d41402abc4b2a76b9719d911017c592 -
看: help echo
或使用 printf:
printf "%s" "hello" | md5sum
Run Code Online (Sandbox Code Playgroud)