java - 匹配部分字符串以恢复密码

标签 java regex

我正在尝试为此考虑一个正则表达式,但没有任何运气......

假设您的网站上有一个安全问题,以便此人可以恢复密码。人们常常忘记他们是如何输入信息的。例如,对于“您在哪家公司工作?”的问题,用户可能会回答“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/

相关文章:

r - 在 R 中处理日期正则表达式捕获组输出

java - 在 libgdx 中合并多个模型

java - (Datastax 4.1.0) (Cassandra)如何收集 session.executeAsync 的所有响应?

python - 重复提取文本文件中两个分隔符之间的一行,Python

java.util.regex.Pattern$BmpCharProperty.match 处的 java.lang.StackOverflowError(Pattern.java :3715)

regex - Perl\R 正则表达式去除 Windows 换行符

java - 如何通过Hibernate创建数据库

java - 如何检测 Java 字符串中的日语文本?

java - 如何在 apache PDFbox 中生成表格时换行文本

php - 北美编号计划正则表达式