我在想:在保持哈希函数预期冲突计数的情况下,可以安全地哈希的最大字节数是多少?
对于md5、sha-*,甚至crc32或adler32等哈希函数。
对于md5、sha-*,甚至crc32或adler32等哈希函数。
http://en.wikipedia.org/wiki/Birthday_problem#Probability_table
来自链接:
作为比较,10^-18到10^-15是典型硬盘的不可纠正位错误率[2]。理论上,即使可能的输出很多,128位的MD5应该在大约8200亿个文档内保持在这个范围内。
这假设哈希函数输出一个均匀分布。您可以假设有足够的要哈希和密码哈希函数(如md5和sha)或好的哈希(如Murmur3、Jenkins、City和Spooky Hash)。
还假设没有恶意对手积极制造冲突。那么您真的需要一个安全的密码哈希函数,例如SHA-2。
而且要小心:CRC和Adler是校验和,旨在检测数据损坏,而不是最小化预期冲突。它们具有诸如“检测所有位大小为< X或> Y的位清零,适用于Z kbytes以下的输入”等属性,但统计属性不如其他哈希函数。
编辑:不要忘记这一切都是关于概率的。完全有可能仅对小于0.5kb的两个文件进行哈希,得到相同的SHA-512值,尽管这极其不可能(例如迄今为止从未发现SHA哈希的碰撞)。