isu*_*ing 6 php hash levenshtein-distance
当用户创建密码时,我将其哈希(包括盐)并将其保存在数据库中.
现在,当用户想要更改他或她的密码时,我想测试新密码是否与旧密码太相似(我已经看到这在不同的服务上完成,特别是在线银行).
所以,我以为我会使用similar_text或levenshtein功能.如果用户必须输入他或她的旧密码,这就有效.
但是当用户忘记密码并且需要重置密码时,显然不必输入旧密码.所以我需要将新密码与旧密码(保存在数据库中)进行比较,我在纯文本中没有哈希.
现在,当我使用相同的盐散列新密码,并将其与旧密码(散列)进行比较时,我显然无法测试新密码和旧密码是否相似.
我只是想知道公司如何做到这一点,当他们不将密码保存为数据库中的纯文本时?
我在谷歌上找不到任何有用的东西.如果有人有任何建议或链接到更详细讨论这个问题的文章,我会很感激,如果他们可以分享它们.
如果存储的密码被散列(而不是加密),则测试相似性的一种方法是生成新密码的许多可能的排列,对排列进行散列,并查看这些散列中的任何散列是否对应于存储的散列.
产生排列的规则与不允许相似性的规则相同.
旧
password1
Run Code Online (Sandbox Code Playgroud)
新
password2
Run Code Online (Sandbox Code Playgroud)
排列
password
password1 // This permutation's hash matches the stored hash.
password3
1password
etc...
Run Code Online (Sandbox Code Playgroud)