看似空文件和字符串为什么产生MD5SUMS?(Why do seemingly empty file

2019-07-29 18:35发布

考虑以下:

% 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

首先,我对所有这些命令的输出惊讶。 如果有什么事情,我希望总和是所有的人都一样。

Answer 1:

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

第三和第四实施例的处理的单个字符。 在“回声”的情况下,这是一个换行符,即

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

在perl的例子,它是用值为0x00,即单个字节

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

您可以使用“回声”如下重现空校验:

$ echo -n '' | md5sum
d41d8cd98f00b204e9800998ecf8427e -

...和使用Perl如下:

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

在所有四种情况下,你应该期望相同的输出从执行校验的数据相同,但不同的数据应该产生一个完全不同的校验和(这是整点 - 即使它只有一个字符不同)



Answer 2:

看似空文件和字符串为什么产生MD5SUMS?

因为“ ”在的md5sum是有点误导。 它不象如CRC32校验,这是空文件为零。

MD5是消息摘要算法之一。 你可以把它想象成产生取决于其内部状态固定长度的随机前瞻性值(散)一箱。 您可以通过在数据反馈改变内部状态。

和该框内部状态被预定义,使得它产生随机寻找甚至之前的任何数据在进给的哈希值。对于MD5,它正好是d41d8cd98f00b204e9800998ecf8427e



Answer 3:

无需惊讶。 前两个产生真正的空输入MD5SUM。 回声产生一个换行符( echo -n ''应该产生一个空的输出;我没有一台Linux机器此处查看)。 该perl产生单个零字节(未用C相混淆一个零字节标记串的终点)。 最后一个命令正在寻找与空字符串作为其文件名的文件。



文章来源: Why do seemingly empty files and strings produce md5sums?