这可能永远不会发生在现实世界中,并且可能永远不会发生,但让我们考虑一下:假设您有一个git存储库,进行提交,并且变得非常不幸:其中一个blob最终拥有相同的SHA-1另一个已存在于您的存储库中.问题是,Git将如何处理这个?简直失败了?找到一种方法来链接两个blob并根据上下文检查哪一个需要?
更多的是脑筋急转弯而非实际问题,但我发现这个问题很有趣.
如果我在使用git时遇到哈希冲突会发生什么?
例如,我设法提交两个具有相同sha1校验和的文件,git会注意到它还是损坏了其中一个文件?
可以改进git以适应它,或者我是否必须更改为新的哈希算法?
(请不要通过讨论这个问题来转移这个问题 - 谢谢)
对于我们的每个二进制资产,我们生成MD5哈希.这用于检查某个二进制资产是否已存在于我们的应用程序中.但两个不同的二进制资产是否可能生成相同的MD5哈希值.那么两个不同的字符串是否可能生成相同的MD5哈希?
我已经在python 3.3中实现了BloomFilter,并且每次会话都得到了不同的结果.深入研究这种奇怪的行为让我进入了内部的hash()函数 - 它为每个会话返回相同字符串的不同哈希值.
例:
>>> hash("235")
-310569535015251310
Run Code Online (Sandbox Code Playgroud)
-----打开一个新的python控制台-----
>>> hash("235")
-1900164331622581997
Run Code Online (Sandbox Code Playgroud)
为什么会这样?为什么这有用?
直到什么字符串长度可以使用MD5作为哈希而不必担心发生冲突的可能性?
这可能是通过为特定字符集中的每个可能字符串生成MD5哈希值来计算的,增加长度,直到第二次出现哈希(冲突).没有碰撞的字符串的最大可能长度将比碰撞对中的最长字符小一个字符.
这已经针对MD5,SHA1等进行了测试吗?
给定两个不同的消息,A和B(可能是20-80个字符的文本,如果大小完全重要),A的MD5摘要与B的MD5摘要相同且 A的SHA1摘要的概率是多少?与B的SHA1摘要相同?那是:
(MD5(A) == MD5(B)) && (SHA1(A) == SHA1(B))
Run Code Online (Sandbox Code Playgroud)
假设没有恶意意图,即没有选择消息以找到冲突.我只是想知道这种情况发生的可能性.
我认为机会是"天文数字低",但我不确定如何验证这一点.
更多信息:可能消息池的大小受到限制,但是很大(几亿).生日悖论的情况正是我所担心的.
md5算法发生冲突的概率是多少?我相信它非常低.
出于演示目的,在散列时碰撞的几个字符串示例是什么?MD5是一个相对标准的散列选项,所以这就足够了.
我想知道GetHashCode()
在string
实例上调用方法时获取重复值的可能性.例如,根据这篇博文, blair
并brainlessness
在x86机器上具有相同的哈希码(1758039503).
HashMap中的Hash Collision或Hashing Collision不是一个新主题,我遇到了几个博客和讨论板,解释了如何产生Hash Collision或如何以模糊和详细的方式避免它.我最近在一次采访中遇到了这个问题.我有很多事要解释,但我认为很难准确地给出正确的解释.对不起,如果我的问题在这里重复,请告诉我确切的答案:
hashCode()
方法的错误定义,或者equals()
在不完全覆盖hashCode()
方法的情况下保持方法不被覆盖,或者不是由开发人员决定的,许多流行的java库也有可能导致Hash的类碰撞?如果你能分享一个或所有这些问题的答案,我会很感激.
hash-collision ×10
hash ×5
cryptography ×4
md5 ×4
git ×2
math ×2
security ×2
sha1 ×2
c# ×1
collections ×1
collision ×1
digest ×1
hashcode ×1
java ×1
python ×1
python-3.3 ×1