Ruby对文件的MD5计算错误

wgeznvg7  于 2022-11-04  发布在  Ruby
关注(0)|答案(2)|浏览(203)

我正在计算一个文件的MD5总和,并将其与文本文件中提供的值进行比较。我使用下面的行来创建校验和:

cksum = File.open(File.join(File.dirname(path), file),'rb') do |f| 
  MD5.hexdigest(f.read)
end

每隔一段时间,我会得到一个不匹配的,但在系统级别手动运行md5显示文件有正确的MD5。
有人看到我用来计算MD5值的过程有什么问题吗?或者知道为什么用这种ruby方法计算时有时会不匹配吗?

qv7cva1a

qv7cva1a1#

对于追随者,还有一种方法:
对于文件:Digest::MD5.file('filename').hexdigest

8ulbf1ek

8ulbf1ek2#

在这一点上,MD5是一个使用良好的消息摘要,它有一套广泛的测试向量。Ruby的实现不太可能有问题。
这几乎可以肯定是另一种解释,例如,可能在执行校验和时,文件尚未完全写入(即通过另一进程)。在故障排除中,注意f.read结果的长度并根据文件大小进行验证可能会有所帮助。您甚至可以将读取的内容保存到一个单独的文件中,以便以后在发现差异时进行比较。这可能会提供一个线索。
您正确地以二进制模式打开了文件,因此这很好。

相关问题