Java和哈希算法比较文件

问题描述

如果假阳性的概率必须 为零 ,而不是“比闪电击中的概率低”,则完全不能使用哈希算法;您必须逐字节比较文件

值得一提的是,如果您可以使用第三方库,则可以使用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不合适吗?

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”