校验和有多独特?

Baa*_*rud 11 files checksum

我有很多文件需要整理;可悲的是,有许多文件名相同但内容不同,并且文件名不同,但内容相同。

我正在考虑md5sum用于为文件生成校验和,但我需要知道 - 两个不同的文件(即不同的内容)是否可能生成相同的校验和?

如果是,它发生的可能性有多大?

是否可以使用两个不同的不相关(即不在同一个“系列”中)校验和程序来生成两个校验和 - 假设虽然两个不同的文件可能为任一校验和程序生成相同的校验和,它永远不会同时发生在两个人身上?

Ram*_*esh 11

两个文件内容相同,但不同的文件名:(文件1和文件2):

cat file1
this is a simple file

cat file2
this is a simple file

md5sum file1
7de45bf879db49de7e2eacea23e6c165  file1
md5sum file2
7de45bf879db49de7e2eacea23e6c165  file2
Run Code Online (Sandbox Code Playgroud)

两个文件内容不同,但相同的文件名:(文件1和文件1)

cat file1
this is a simple file
cat file1
this is a simple file with extra contents
md5sum file1 #first file1
7de45bf879db49de7e2eacea23e6c165  file1
md5sum file1 #second file1
c7c8f3fd9ddd7a926c31416a69063e4e  file1
Run Code Online (Sandbox Code Playgroud)

从维基条目,

但是,现实世界中任何两个不同的文件都不太可能具有相同的 MD5 哈希值,除非它们是专门创建为具有相同的哈希值的。

但是,MD5算法有其自身的缺陷。

但是,现在很容易产生 MD5 冲突,创建文件的人可能会创建具有相同校验和的第二个文件,因此该技术无法防止某些形式的恶意篡改。此外,在某些情况下,校验和是不可信的(例如,如果它是通过与下载文件相同的渠道获得的),在这种情况下,MD5 只能提供错误检查功能:它会识别损坏或不完整的下载,下载较大的文件时,这变得更有可能。

我建议使用 sha1 来计算校验和,因为在使用sha1算法时产生冲突并不容易。生产SHA1校验是很容易的,你可以看到在这里。