Mysql 我应该使用哪种哈希算法来检查文件的重复性

Mysql 我应该使用哪种哈希算法来检查文件的重复性,mysql,hash,hashcode,Mysql,Hash,Hashcode,我有一个WCF服务,它接收XML文件(以字符串参数形式)进行处理。现在我想实现一个错误日志过程。我想在发生异常时记录一个异常,以及生成错误的XML文件 为此,我创建了一个MySQL数据库,文件将存储在一个长blob字段中 我的疑问是如何避免存储文件的表中的重复,因为用户可以重复提交相同的文件。为了节省存储空间,我想确定已经保存了完全相同的文件,在这种情况下,只需重用引用即可 哪种方法最好?我的第一个想法是生成一个Hashcode并将其保存在表中的另一个字段中,以便以后可以使用它进行搜索。 搜索时

我有一个WCF服务,它接收XML文件(以字符串参数形式)进行处理。现在我想实现一个错误日志过程。我想在发生异常时记录一个异常,以及生成错误的XML文件

为此,我创建了一个MySQL数据库,文件将存储在一个长blob字段中

我的疑问是如何避免存储文件的表中的重复,因为用户可以重复提交相同的文件。为了节省存储空间,我想确定已经保存了完全相同的文件,在这种情况下,只需重用引用即可

哪种方法最好?我的第一个想法是生成一个Hashcode并将其保存在表中的另一个字段中,以便以后可以使用它进行搜索。 搜索时,我发现有各种算法可用于计算哈希:

System.Security.Cryptography.KeyedHashAlgorithm
System.Security.Cryptography.MD5
System.Security.Cryptography.RIPEMD160
System.Security.Cryptography.SHA1
System.Security.Cryptography.SHA256
System.Security.Cryptography.SHA384
System.Security.Cryptography.SHA512

哪一个更好?使用其中一个来确定文件是否重复是否安全?使用此方法与使用.GetHashCode()函数有什么区别?

所有哈希函数本身都有,因此无法使用它们可靠地标识文件。(如果您尝试这样做,您的系统将在一段时间内正常工作,时间长度取决于随机机会和散列大小,然后在确定两个完全不同的文件相同时发生灾难性失败。)

散列作为机制的第一步可能仍然有用,其中散列定位一个可以包含0..n个文件的“bucket”,并且您可以通过比较完整的文件内容来确定实际的唯一性

因为这是一个哈希算法速度为正的应用程序,所以我会使用MD5