我使用Apache DigestUtils获取文件的Md5如下:
public static String getMd5(File file) throws Exception
{
FileInputStream fis = null;
String md5 = "";
fis = new FileInputStream(file);
md5 = DigestUtils.md5Hex(fis)
IOUtils.closeQuietly(fis);
return md5;
}
这个Md5被用作钥匙。我正在检查唯一性(因为可能存在碰撞),但是,如果它不是唯一的,我该如何使其独特?
提前致谢!
答案 0 :(得分:2)
实际上,没有什么可以使散列函数独特(显而易见,因为它将大数据映射到小数据)。对于MD5,这些冲突不会偶然发生在合理数量的文件中,但是想要破坏程序的人可以构造具有相同MD5哈希的文件(例如参见http://www.mathstat.dal.ca/~selinger/md5collision/)。如果你想避免这种情况,我建议你使用被认为更安全的哈希函数,比如SHA-256。如果你真的必须处理带冲突的哈希函数,那么使用这个哈希作为密钥的数据结构需要机制来处理这种情况(例如二次哈希或使用列表来存储具有相同哈希的项目)。