整个文件的MD5校验和与内容的校验和不同

时间:2011-09-09 12:29:58

标签: md5

我创建了一个包含一个单词的文件a.txt - 'dog'。

这是一个MD5校验和:

$md5sum a.txt

c52605f607459b2b80e0395a8976234d  a.txt

这是单词dog的MD5校验和:

$perl -e "use Digest::MD5 qw(md5_base64 md5_hex); print(md5_hex('dog'));"

06d80eb0c50b49a509b49f2424e8c805

为什么校验和会有所不同?

谢谢,

马丁

3 个答案:

答案 0 :(得分:5)

据推测,文件末尾有换行符。尝试使用echo -n:

$ perl -e "use Digest::MD5 qw(md5_base64 md5_hex); print(md5_hex('dog'));"
06d80eb0c50b49a509b49f2424e8c805
$ echo 'dog' >a.txt
$ md5sum a.txt
362842c5bb3847ec3fbdecb7a84a8692  a.txt
$ echo -n 'dog' >a.txt
$ md5sum a.txt
06d80eb0c50b49a509b49f2424e8c805  a.txt

这是一个非常常见的问题:

答案 1 :(得分:0)

md5_base64只是一个函数声明。

use Digest::MD5 qw(md5_base64 md5_hex)

意味着我可以使用库Digest :: MD5中的函数md5_base64()或md5_hex()

基本上你可以使用除Perl之外的其他工具来计算单词的MD5哈希...

我想知道为什么文件的校验和(使用md5sum)与内容本身的校验和不同...

在计算MD5之前,md5sum是否会将有关该文件的一些信息附加到内容中? 或者是否有一些字符“文件结束”?

感谢您的时间......

答案 2 :(得分:0)

执行和MD5计算文件时(在您的情况下为txt),即使控制字符(EOF,SOH,LF,CR)也考虑文件的整个内容,它们是不可打印的字符,但具有一些HEXA值这会改变相应的MD5结果,这与仅将字符串传递给MD5函数的结果不同。