我正在计算一个文件的MD5总和,并将其与文本文件中提供的值进行比较。我使用下面的行来创建校验和:
cksum = File.open(File.join(File.dirname(path), file),'rb') do |f| MD5.hexdigest(f.read) end
每隔一段时间,我会得到一个不匹配的,但在系统级别手动运行md5显示文件有正确的MD5。有人看到我用来计算MD5值的过程有什么问题吗?或者知道为什么用这种ruby方法计算时有时会不匹配吗?
qv7cva1a1#
对于追随者,还有一种方法:对于文件:Digest::MD5.file('filename').hexdigest
Digest::MD5.file('filename').hexdigest
8ulbf1ek2#
在这一点上,MD5是一个使用良好的消息摘要,它有一套广泛的测试向量。Ruby的实现不太可能有问题。这几乎可以肯定是另一种解释,例如,可能在执行校验和时,文件尚未完全写入(即通过另一进程)。在故障排除中,注意f.read结果的长度并根据文件大小进行验证可能会有所帮助。您甚至可以将读取的内容保存到一个单独的文件中,以便以后在发现差异时进行比较。这可能会提供一个线索。您正确地以二进制模式打开了文件,因此这很好。
f.read
2条答案
按热度按时间qv7cva1a1#
对于追随者,还有一种方法:
对于文件:
Digest::MD5.file('filename').hexdigest
8ulbf1ek2#
在这一点上,MD5是一个使用良好的消息摘要,它有一套广泛的测试向量。Ruby的实现不太可能有问题。
这几乎可以肯定是另一种解释,例如,可能在执行校验和时,文件尚未完全写入(即通过另一进程)。在故障排除中,注意
f.read
结果的长度并根据文件大小进行验证可能会有所帮助。您甚至可以将读取的内容保存到一个单独的文件中,以便以后在发现差异时进行比较。这可能会提供一个线索。您正确地以二进制模式打开了文件,因此这很好。