我正在开展一个项目,我需要有一组密码限制,其中包含一个不允许密码的文件(所有常用密码,如'abc','abcdef','12345''密码'等等。)密码文件将包含大约10000-15000个单词。
现在我想确保当用户设置/更改密码时,它在列表中不存在。我正在考虑在Java中使用字典(或地图)(将桶作为'A','B','C'......'Z','NUMBERS','SPECIAL_CHARS')以便我只检查第一个字符,然后搜索相应的桶。但我不确定我可以从中获得什么样的表现。
有关使用“禁用密码”列表的任何建议......还有其他需要注意的提示吗?
答案 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变量来保存所有受限制的字符串。