问题描述
如果假阳性的概率必须 为零 ,而不是“比闪电击中的概率低”,则完全不能使用哈希算法;您必须逐字节比较文件。
值得一提的是,如果您可以使用第三方库,则可以使用Guava使用单行代码逐字节比较两个文件
Files.asByteSource(file1).contentEquals(Files.asByteSource(file2));
如果您愿意接受比闪电击中可能性小的误报,那么您可以
Files.hash(file, Hashing.sha1()); // or md5(), or sha256(), or...
它返回一个HashCode
,然后您就可以测试它是否与另一个文件的哈希值相等。(该版本还处理了MessageDigest
,正确打开和关闭文件等的混乱情况。)
解决方法
我必须对指纹文件进行匹配才能匹配双峰。在2013年,对Java有何建议?我是否还应该比较文件大小,或者这是不必要的检查?
误报的可能性应该非常接近0
编辑:很多答案,谢谢。如今备份软件的标准是什么?SHA-256?更高?我猜md5不合适吗?