当前位置: 首页 > 知识库问答 >
问题:

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

陆绪
2023-03-14

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

共有1个答案

酆茂才
2023-03-14

所有哈希本质上都有冲突,因此您无法使用它们来可靠地标识文件。(如果您尝试这样做,您的系统将在一段时间内看起来运行良好,其长度取决于随机机会和哈希的大小,然后在确定两个完全不同的文件相同时发生灾难性失败。

哈希作为哈希定位可以包含0… n文件的“桶”的机制的第一步可能仍然有用,您可以通过比较完整的文件内容来确定实际的唯一性。

因为这是一个散列算法速度为正数的应用程序,所以我使用MD5。

 类似资料:
  • 主要内容:哈希表是什么,哈希查找算法哈希查找算法又称 散列查找算法,是一种借助哈希表(散列表)查找目标元素的方法,查找效率最高时对应的时间复杂度为 O(1)。 哈希查找算法适用于大多数场景,既支持在有序序列中查找目标元素,也支持在无序序列中查找目标元素。讲解哈希查找算法之前,我们首先要搞清楚什么是哈希表。 哈希表是什么 哈希表(Hash table)又称 散列表,是一种存储结构,通常用来存储多个元素。 和其它存储结构(线性表、树等)

  • 问题内容: 我已经看到以下内容: AngularJS文档也提到了这一点,我不太了解。 这些方法之间有什么区别吗?特别是Angular文档的最后一种方法是做什么的?一个比另一个更好用吗? 问题答案: 它们大致相同,但有一些区别: 如果您 在页面末尾 (而不是在标题中)加载 了 脚本,这将起作用。 否则,在引导应用程序时将不会加载DOM(不会编译任何模板,指令不会有任何效果)。 此作品:plnkr 这

  • 问题内容: 我必须对指纹文件进行匹配才能匹配双峰。在2013年,对Java有何建议?我是否还应该比较文件大小,或者这是不必要的检查? 误报的可能性应该非常接近0 编辑:很多答案,谢谢。如今备份软件的标准是什么?SHA-256?更高?我猜md5不合适吗? 问题答案: 如果假阳性的概率必须 为零 ,而不是“比闪电击中的概率低”,则完全不能使用哈希算法;您必须逐字节比较文件。 值得一提的是,如果您可以使

  • 这些方法有什么区别吗?特别是最后一种方法是什么?一个比另一个好用吗?

  • 问题内容: 我正在尝试决定要选择哪种mime类型来返回mp3数据(由php提供) 根据此mime类型列表:http : //www.webmaster-toolkit.com/mime-types.shtml 这些之间有什么区别,我应该使用哪个? 问题答案: 最好的选择是使用RFC定义的 mime-type 。

  • 问题内容: 我读过我应该用 钱 ,但是在当今快节奏的世界里,现在也许已经过时了。 我应该使用什么? 问题答案: 不,钱应该还是可以的。