首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HashCode对SHA-1

HashCode对SHA-1
EN

Stack Overflow用户
提问于 2009-05-12 15:19:42
回答 5查看 13.1K关注 0票数 9

我想比较一些表示树的大型对象,并缓存,以避免每次将新对象与已经存在的对象进行比较.

问题是什么是最好的?(性能和碰撞之间的折衷.)。

一方面,我有一个基于各个字段的值的正则hashCode函数(遵循有效Java的第3章)。但我无法评估这种方法所带来的潜在碰撞。

另一方面,我使用SHA-1算法从标准的java发行版获得了MessageDigest方法。我想这不是很有效率,但我的碰撞可能会少一些。我说得对吗?在我的背景下,这是一个正确的解决方案,还是我完全错了?

问题是我不知道物体的大小。还请注意,计算出来的值不会在HashTable中使用。

thx..。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-05-12 15:39:21

见以下内容:

请记住以下几点:

  • 对象可能是不相等的,但是具有相同的哈希码。
  • 您的碰撞潜力取决于您遇到了多少对象。
  • 哈希代码的有用程度取决于您如何实现检查。

通常,您可以根据预期对象的数量和可能的散列数(最大哈希值)来确定碰撞的可能性。有关详细说明,请参见悖论

亲自吗?Java对象(实例化类)< 10,000?哈希码。表示文件/波包/大量数据?沙一。我在我的数据库中使用SHA-1散列来阻止人们多次在同一个文件上执行ETL工作。然后,我在第二个级别上再次使用SHA-1散列来防止人们在多个文件中使用相同的ETLing (例如,不同的文件,但相同的顺序显示了两次)。

票数 15
EN

Stack Overflow用户

发布于 2009-05-12 15:27:56

就我个人而言,我会将hashCode()用于对象,直到证明任何可能的碰撞都是一个实际的问题,以避免先发制人地优化您可能实际上没有的问题。

票数 11
EN

Stack Overflow用户

发布于 2009-05-12 15:40:35

由于生日问题,的存在,碰撞的可能性取决于您正在处理的项目的数量。

SHA-1的160位空间是如此之大,我怀疑你是否有足够的项目来看到碰撞。

hashCode()的32位空间在超过50,000项之前不应该有大量的碰撞。然而,这取决于使用一个好的哈希算法。

为了应用像SHA-1这样的密码摘要,您需要将图形转换成一个字节串,这在计算上可能很昂贵,而且可能很复杂。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/853332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档