哈希的md5哈希

时间:2012-08-22 07:13:54

标签: php security hash md5 md5-file

这是一个理论问题,但我很好奇。如果我这样做(PHP中的代码,但在这种情况下语言并不重要):

$value  = ''; //starting value
$repeat = false;

while(true)
{

     $value = md5($value);

     /*Save values in database, one row per value*/

     /*Check for repeated hash value in db, and set $repeat flag true if there is one*/

     if($repeat)break;    
}

如您所见,我怀疑会有重复的哈希值。我认为没有办法让每个现有的文本都有自己的值,因为它应该意味着每个哈希值都有自己的,并且没有意义。

我的问题是:那里有关于这个“问题”的文章吗?可能会发生我在一个系统中获得相同的值,例如当我对文件进行哈希检查它们是否有效时?这会在任何系统的任何地方引起问题吗?

2 个答案:

答案 0 :(得分:3)

如果您关心多个文本散列到相同的值,请不要使用MD5。 MD5具有快速碰撞攻击,这违反了您想要的属性。改为使用SHA-2。

当使用安全散列函数时,很难找到128个哈希的冲突,我的意思是我不知道它发生的任何情况。但是如果你想避免这种机会,只需使用256位哈希。然后使用蛮力发现碰撞现在超出了全人类的计算能力。特别是,没有已知的消息对,SHA-256(m1) == SHA-256(m2)m1 != m2

你是正确的,哈希不能是唯一的(参见Pidgeonhole principle),但实际上找到这种情况的可能性非常低。所以不要为处理这种情况而烦恼。

我通常的目标是128位安全级别,所以当我需要无冲突哈希函数时,我使用256位哈希函数,例如SHA-256。


使用哈希链,除非您愿意等待 long 时间,否则不会发现冲突。一旦你有大约2 ^(n / 2)次,碰撞就变得很可能,在128位哈希(例如md5)的情况下,这是2 ^ 64。我知道没有针对128位哈希的暴力冲突。我所知道的唯一冲突是精心设计的消息,它们利用您使用的散列方案中的弱点(针对md5存在的那些)。

答案 1 :(得分:-3)

通过相同的方法或不同的方法多次哈希,然后重复自己几乎是不可能的,还要检查它们是否重复然后重复哈希函数直到值不同,然后保存在数据库中或者在任何地方使用它你喜欢......