是否可以找出MD5密码的字符长度?

时间:2017-02-07 16:20:40

标签: php hash passwords

我在MySQL数据库中保存了哈希的哈希密码。无论如何都要找出原密码中有多少个字符?

我认为不存在,因为根据我所读到的内容,无论如何都难以解密哈希密码。

无论如何我可以这样做?

编辑:因为严重的反弹!!我对解密哈希不感兴趣,因为我知道这不是我读过的好主意。

我问的原因是因为。

我正在将包含历史数据库的旧系统迁移到新的更新应用程序。所有用户,数千人都将他们的密码保存在数据库MD5中,但大多数都少于8个字符,所以我只是想知道是否有办法知道他们的原始密码是否超过8个字符,那么我可以加密它或者强迫用户更改密码。

但我必须强迫所有用户根据其外观更改密码

3 个答案:

答案 0 :(得分:7)

From OP's comment:

  

我只是纯粹要求保存,如果他们的密码低于某个字符限制,请强制所有用户更改密码 - frobak

这样做的答案是使用strlen()

至于MD5,不要使用它,它完全不安全。 30多年来,大量的水流入桥下。

使用password_hash()

解密哈希;它无法完成/逆转;这就是为什么它被称为哈希并且没有加密。

有所谓的“彩虹表”:

  

但我必须强迫所有用户根据其外观更改密码

请参阅以下内容:Converting md5 password hashes to PHP 5.5 password_hash()

这样你就可以“一举两得”

然而,MD5 is 32-length。使用password_hash()和Jay Blanchard在his comment中说明时,您需要将其增加到60+才能获得适当的长度,否则在使用password_verify()时可能会“无声地”失败}。

答案 1 :(得分:3)

不。您可以生成随机字符串并对其进行散列,直到找到匹配项并测量其长度(这将花费很长时间,实际上可能因为冲突而不正确,不要这样做) ,但除此之外,这是不可能的。

答案 2 :(得分:0)

答案已经给出,值得提出,但我想就此问题分享另一种看法。

是否可以找出字符长度?

实际上没有办法从MD5哈希中判断原始密码中的字符数。

是否可以找到少于8个字符的密码?

不幸的是。由于破解工具可以强制约20 Giga Md5 per second,因此可以在3分钟内测试所有7个字符的密码组合(a-z A-Z 0-9)!

请注意,这是我建议做什么,因为它是非法的,只是为了表明这种哈希是多么不安全。相反,您可以从存储的MD5哈希计算第二个哈希值,我在另一个answer中进行了描述。