我创建了一个包含一个单词的文件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
为什么校验和会有所不同?
谢谢,
马丁
答案 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函数的结果不同。