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

nav*_*pai 7 java passwords dictionary

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

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

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

Jav*_*ier 2

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

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