如何存储和搜索“禁用密码”列表

时间:2013-03-08 06:05:31

标签: java dictionary passwords

我正在开展一个项目,我需要有一组密码限制,其中包含一个不允许密码的文件(所有常用密码,如'abc','abcdef','12345''密码'等等。)密码文件将包含大约10000-15000个单词。

现在我想确保当用户设置/更改密码时,它在列表中不存在。我正在考虑在Java中使用字典(或地图)(将桶作为'A','B','C'......'Z','NUMBERS','SPECIAL_CHARS')以便我只检查第一个字符,然后搜索相应的桶。但我不确定我可以从中获得什么样的表现。

有关使用“禁用密码”列表的任何建议......还有其他需要注意的提示吗?

3 个答案:

答案 0 :(得分:2)

如果你将“每个字母一个桶”的方法扩展到完整的字符串,你将以trie结束,这看起来像这个问题的一个很好的结构,虽然我看不出原因不使用单个HashSet(毕竟,验证成本几乎是不变的,并且哈希集在应该存储密码的桶中搜索)。根据初始字母拆分哈希不会改善与使用单个集合相比的性能。

另一方面,如果您的实现受内存限制,您可以避免存储一些禁用的密码并执行规则引导的验证(例如,检查是否有4个连续字符相差一个,如“ghij”,或者检查它们是否是键盘行的片段,例如“yuiop”)。每条规则都相当于几个被禁用的密码。

答案 1 :(得分:1)

您可能希望使用真正的lib来执行此操作。例如.. https://code.google.com/p/java-dictionary-password-validator/

答案 2 :(得分:0)

你必须编写一个方法,可以检查字符序列(例如:abcdef)和相同字符(例如:111111)和所有其他约束。除此之外你还需要一个静态的List / Set变量来保存所有受限制的字符串。