想用 C++ 创建一个强密码。有什么建议么?
我认为它应该使用字母(大写和小写)、数字、特殊字符。
能够指定最小长度会很好。
最好避免使用难以在视觉上区分的字符,例如“O”和“O”
将所有相同的字符、字典单词、颠倒的单词、名称都作废会很棒。
还有其他提示吗?我在哪里可以找到这样的代码?
有几种方法。简单的不一定是最好的
创建一个代表您要定义的所有字符的字符串(意思是没有 O 或 0,等等),然后用该集合中的随机字符填充一个随机长度的字符串。
下一步是继续生成,直到您通过所有断言。也就是说,检查字典单词、反向名称等。
有时生成所需的时间比预期的要长,但仍应该比您注意到的要快。
您可以使用OpenSSL 的随机生成器,然后对其进行 base64 编码。(不会得到各种随机字符,但会得到很多。)。遗憾的是,它也不会执行类似的字符密码位。我最喜欢的生成器在这里,它提供了您正在谈论的功能。(遗憾的是,仅限网络)
APG(自动密码生成器)实现了除您的最后一个要求之外的所有要求(没有字典单词/用户名/重复字符)。它包括可发音和完全随机的密码生成算法。可发音的密码如下所示:
耶夫盖伊拉 克利沙霍普 犹太人Ams8 RacMevOm 杜赫姆奇& 雷克桑~
它是用 C 语言编写的,可以在类似 BSD 的许可证下使用。
从密码学上讲,我不确定您的最后一个要求是否有效......?如果密码生成是真正随机的,那么密码 的aaaaaaaa
可能性与密码的 相同6-n&1jIK
,并且如果您的攻击者知道您的算法,那么通过禁止密码之类aaaaaaaa
的,您正在减少攻击者的搜索空间。