当用户创建密码时,我对其进行哈希处理(包括盐)并将其保存在数据库中。
现在,当用户想要更改他或她的密码时,我想测试新密码是否与旧密码太相似(我已经在不同的服务上看到过这种情况,尤其是网上银行)。
所以,我想我会使用similar_text
or levenshtein
功能。如果用户必须输入他或她的旧密码,则此方法有效。
但是,当用户忘记密码并且需要重置密码时,显然不必输入旧密码。因此,我需要将新密码与旧密码(保存在数据库中)进行比较,我没有纯文本形式的密码,而是哈希值。
现在,当我使用相同的盐对新密码进行哈希处理,并将其与旧密码(经过哈希处理)进行比较时,我显然无法测试新密码和旧密码是否相似。
我只是想知道,当公司不将密码以纯文本形式保存在数据库中时,他们是如何做到这一点的?
我在谷歌上找不到任何有用的东西。如果有人有任何建议,或者更详细讨论此问题的文章链接,如果他们能够分享,我将不胜感激。
如果存储的密码经过散列(而不是加密),则测试相似性的一种方法是生成新密码的许多可能的排列,对排列进行散列,并查看这些散列中的任何一个是否与存储的散列相对应。
生成排列的规则与不允许的相似性的规则相同。
OLD
password1
NEW
password2
排列
password
password1 // This permutation's hash matches the stored hash.
password3
1password
etc...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)