确定文件是否重复

Tod*_*d R 6 java comparison checksum file platform-agnostic

有没有可靠的方法来确定两个文件是否相同?例如,两个具有相同大小和类型的文件可能是也可能不是相同的二进制文件(是的,我知道它不是一个单词).我假设比较文件的一个或两个校验和会有所帮助,但我想知道:

  1. 在确定两个文件是否不同时,校验和的可靠性如何; 两个不同文件具有相同校验和的几率是多少?
  2. 通过应用额外的校验和比较,可靠性会增加吗?
  3. 哪种校验和算法最有效和/或最可靠?

任何想法,建议或想法都表示赞赏!

PS这个代码是用在nix系统上运行的Java编写的,但通用或平台无关的输入是最有用的.

Pop*_*ops 6

除非你逐字节地比较它们,否则不可能确切地知道两个文件是否相同.除非您检查集合中的每个项目,否则它类似于您无法保证集合包含或不包含给定对象的方式.

校验和基本上是哈希.它们是否足以满足您的目的取决于您的应用程序的关键任务.当然可以创建具有低冲突风险的哈希函数; 毕竟,即使在他们保护敏感数据并且您不希望在您的帐户上拥有第二个有效密码的情况下,也会对密码进行哈希处理.除非您为银行编写代码,否则强校验和算法应提供非常好的近似值.

当且仅当不同的校验和算法使用不同的散列函数时,使用多个校验和将提高可靠性.

leonbloy的回答已经解决了你的第三个问题; MD5和SHA-1很常见.


zaf*_*zaf 5

1) Very reliable
2) Not theoretically
3) SHA-1
Run Code Online (Sandbox Code Playgroud)

  • @IVlad是正确的,两个文件可能具有相同校验和的可能性很小,并且使用多个校验和会降低该概率,因此,理论上这将提高可靠性.然而,校验和在实践中是如此可靠,这是不必要的.此外,CRC32为这个应用程序提供了更好的选择:我们不关心恶意输入,它比SHA1快得多. (6认同)