【问题标题】:MD5 checksum of the whole file is different from checksum of content整个文件的 MD5 校验和与内容的校验和不同
【发布时间】:2011-09-09 12:29:58
【问题描述】:

我创建了一个文件 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

为什么校验和不同?

谢谢,

马丁

【问题讨论】:

  • 我对 perl 一无所知,但 md5_base64 base64 是干什么用的?也许文本文件中有一个字节顺序标记它的 unicode?​​span>

标签: md5


【解决方案1】:

大概你在文件末尾有一个换行符。尝试使用 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 就是这样; log(hex_md5("dog\n\n")) === c52605f607459b2b80e0395a8976234d
【解决方案2】:

md5_base64 只是一个函数声明。

use Digest::MD5 qw(md5_base64 md5_hex)

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

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

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

md5sum 是否在计算 MD5 之前将有关文件的一些信息附加到内容中? 还是有一些字符“文件结尾”?

感谢您的宝贵时间...

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-02
      • 2014-06-21
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多