我正在尝试为此考虑一个正则表达式,但没有任何运气......
假设您的网站上有一个安全问题,以便此人可以恢复密码。人们常常忘记他们是如何输入信息的。例如,对于“您在哪家公司工作?”的问题,用户可能会回答“Microsoft Corp.”。但一个月后,当他们被提示回答这个问题时,他们可能会输入“Microsoft”,这与他们原来的答案不符,即使他们显然回答正确。
“微软公司。”或“微软公司”或“微软公司”将匹配“Microsoft”,而“questar gas”将匹配“Questar Gas Co.”。 “Bank Corp. of America”不会匹配“Bank of America”,因为“Corp.”这个词。不在字符串的末尾。
实现此目标的最佳方法是什么?
最佳答案
我不会太担心人们会改变他们的答案。人们在回答这类问题的方式上非常一致。如果我知道你的第一份工作是在 Microsoft,那么我输入的方式略有不同可能表明我是一名攻击者。
避免在数据库中放置明文答案。这类似于存储明文密码,这绝对是个坏主意。如果您的数据库或数据库的备份超出了您的控制,那么您的客户的私有(private)信息就会泄露。也许它不会落入坏人之手,但想想您必须发送给用户的电子邮件。 “以相同方式更改您回答此问题的所有网站。”
取而代之的是,获取答案的加盐哈希值,并将其存储在数据库中。当用户稍后回答问题时,使用相同的算法对他们的答案进行哈希处理,并与存储的值进行比较。
您可以使用一些规范化来最大程度地减少拼写错误的影响。您可以转换为小写字母,并删除空格和标点符号。例如,“微软公司”。将成为“microsoftcorp”。这样,如果用户决定取消句点或添加另一个空格,它仍然会匹配。
关于java - 匹配部分字符串以恢复密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/967495/