7

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

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

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

4

3 回答 3

2

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

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

于 2013-03-08T06:13:16.423 回答
1

You might want to use a real lib to do this. For example.. https://code.google.com/p/java-dictionary-password-validator/

于 2013-08-02T19:33:12.397 回答
0

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

于 2013-03-08T06:14:55.760 回答