我正在使用 Node.js 将文件读取为字节数据(uint8array)并使用 SHA256 对文件的字节数据进行哈希处理,如下所示:
ad505ee6067fba3f6fc20506d3379e190e087aeffe5d958ab9f2f3ed3800sa4f
我想知道是否有可能或者偶然地,两个不同的文件具有相同的字节数据,从而导致相同的 SHA256 哈希值?或者,如果是同一个文件,但只有很小的变化,例如修改日期、后缀或其他一些小的变化,会怎么样?
如果是这样,还有其他实用的方法可以获取字符串中文件的唯一标识符吗?
答案1
我很好奇,文件内容如何,两个内容不同的文件是否会有相同的二进制数据
一般情况下不会。“内容不同”字面意思是不同的“二进制数据”。这些都是同一件事——你从文件中读取的数据是其全部内容。文件的元数据(例如文件名、修改时间或扩展属性)不被视为其“内容”。
(Windows 上 NTFS 上的文件可能包含“备用数据流”,其行为更像整个文件而不是扩展属性,但与过去的 macOS 资源分叉不同,没有 Windows 程序会将文件内容分布在多个流中 - 非主流仅用作保存扩展属性的一种方式,因此可以安全地将它们视为元数据。)