我在MySQL数据库中保存了哈希的哈希密码。无论如何都要找出原密码中有多少个字符?
我认为不存在,因为根据我所读到的内容,无论如何都难以解密哈希密码。
无论如何我可以这样做?
编辑:因为严重的反弹!!我对解密哈希不感兴趣,因为我知道这不是我读过的好主意。我问的原因是因为。
我正在将包含历史数据库的旧系统迁移到新的更新应用程序。所有用户,数千人都将他们的密码保存在数据库MD5中,但大多数都少于8个字符,所以我只是想知道是否有办法知道他们的原始密码是否超过8个字符,那么我可以加密它或者强迫用户更改密码。
但我必须强迫所有用户根据其外观更改密码
答案 0 :(得分:7)
我只是纯粹要求保存,如果他们的密码低于某个字符限制,请强制所有用户更改密码 - 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中进行了描述。