C#中文件的唯一id

本文关键字:唯一 id 文件 中文 | 更新日期: 2023-09-27 18:28:06

我需要为200-300MB的文件大小生成一个唯一的id。条件是算法应该很快,不需要太多时间。我正在从桌面上选择文件并计算哈希值,如下所示:

HMACSHA256 myhmacsha256 = new HMACSHA256(key);
byte[] hashValue = myhmacsha256.ComputeHash(fileStream);

filestream是文件的句柄,用于从中读取内容。由于明显的原因,此方法将花费大量时间。windows是否为一个文件生成一个密钥,用于我可以直接使用的自己的簿记?有没有其他方法可以识别文件是否相同,而不是匹配文件名,这不是很简单。

C#中文件的唯一id

MD5.Create().ComputeHash(fileStream);

或者,我建议考虑这个类似的问题。

根据文件本身提供的信息生成哈希怎么样?即连接:

  • 文件名
  • 文件大小
  • 创建日期
  • 上次修改日期

并创建自己的?

当您计算哈希并对其进行比较时,需要完全遍历这两个文件。我的建议是,如果文件大小相同,首先检查文件大小,然后逐字节检查文件。

如果您想进行"快速且肮脏"的检查,我建议您查看CRC-32。它非常快(该算法只需对表查找进行异或运算),如果您不太关心抗冲突性,那么文件大小和文件数据的CRC-32校验和的组合就足够了。需要28.5位来表示文件大小(即379M字节),这意味着您得到的校验和值实际上刚刚超过60位。我会使用64位的数量来存储文件大小,以备将来验证,但在您的场景中,32位也可以。

如果碰撞抵抗的一个考虑因素,那么您几乎必须使用一种久经考验但未中断的加密哈希算法。然而,我仍然同意Devils child所写的内容,并将文件大小作为哈希的一个单独(易于访问)部分;如果大小不匹配,则文件内容不可能相同,因此在这种情况下,可以跳过计算密集型哈希计算。