2015-11-02 103 views
1

我有一个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()函数有什么区别?

回答

2

所有散列本质上都有collisions,所以您不能使用它们来可靠地识别文件。 (如果你试图这样做,你的系统看起来能够很好地工作一段时间,但是它的长度取决于随机机会和哈希的大小,在它决定两个完全不同的文件的灾难性发生之前是一样的)。

散列可能仍然是有用的,作为哈希定位可包含0​​..n个文件的“存储区”的机制的第一步,并且通过比较完整文件内容来确定实际唯一性。

由于这是一个应用程序,散列算法的速度是积极的,我会使用MD5。

相关问题