【发布时间】:2012-03-16 11:55:26
【问题描述】:
我需要为最大 200-300MB 的文件生成一个唯一 ID。条件是算法应该很快,不应该花费太多时间。我正在从桌面选择文件并计算哈希值:
HMACSHA256 myhmacsha256 = new HMACSHA256(key);
byte[] hashValue = myhmacsha256.ComputeHash(fileStream);
filestream 是文件的句柄,用于从中读取内容。由于显而易见的原因,此方法将花费大量时间。 Windows 是否为我可以直接使用的自己的簿记生成文件的密钥? 有没有其他方法可以识别文件是否相同,而不是匹配文件名,这不是很简单。
【问题讨论】:
-
也许你应该散列而不是流,而只是文件大小?
-
为什么要重新发明轮子?为什么不直接使用md5?
-
@mtijn,可能是因为MD5 is broken 不应该用于新的实现?
-
@MichaelKjörling - 除非恶意用户制造,否则您不太可能发生碰撞;而且由于 OP 没有使用 MD5 来保证安全性,我不认为这是一个问题。
-
我在问题中看不到任何表明是否需要抗碰撞性的内容,只是这是关于确定“文件是否相同”。
标签: c# file-io desktop-application