为什么看起来空文件和字符串产生md5sums?

考虑以下:

% md5sum /dev/null
d41d8cd98f00b204e9800998ecf8427e  /dev/null
% touch empty; md5sum empty
d41d8cd98f00b204e9800998ecf8427e  empty
% echo '' | md5sum
68b329da9893e34099c7d8ad5cb9c940  -
% perl -e 'print chr(0)' | md5sum
93b885adfe0da089cdf634904fd59f71  -
% md5sum ''
md5sum: : No such file or directory

首先,我对所有这些命令的输出感到惊讶。如果有什么,我希望所有的金额都是一样的。

“无”(零长度的字符流)的md5sum是d41d8cd98f00b204e9800998ecf8427e,你在前两个例子中看到。

第三和第四个例子是处理单个字符。在“echo”的情况下,它是一个换行符,即

$ echo -ne '\n' | md5sum
68b329da9893e34099c7d8ad5cb9c940 -

在perl示例中,它是一个值为0x00的单字节,即

$ echo -ne '\x00' | md5sum
93b885adfe0da089cdf634904fd59f71 -

您可以使用“echo”重现空校验和,如下所示:

$ echo -n '' | md5sum
d41d8cd98f00b204e9800998ecf8427e -

…并使用Perl如下:

$ perl -e 'print ""' | md5sum
d41d8cd98f00b204e9800998ecf8427e  -

在所有四种情况下,您应该期望相同的输出校验相同的数据,但不同的数据应该产生一个非常不同的校验和(这是整个点 – 即使它只有一个字符不同)。

翻译自:https://stackoverflow.com/questions/10909976/why-do-seemingly-empty-files-and-strings-produce-md5sums

转载注明原文:为什么看起来空文件和字符串产生md5sums?