1

想用 C++ 创建一个强密码。有什么建议么?

  • 我认为它应该使用字母(大写和小写)、数字、特殊字符。

  • 能够指定最小长度会很好。

  • 最好避免使用难以在视觉上区分的字符,例如“O”和“O”

  • 将所有相同的字符、字典单词、颠倒的单词、名称都作废会很棒。

还有其他提示吗?我在哪里可以找到这样的代码?

4

5 回答 5

3

有几种方法。简单的不一定是最好的

创建一个代表您要定义的所有字符的字符串(意思是没有 O 或 0,等等),然后用该集合中的随机字符填充一个随机长度的字符串。

下一步是继续生成,直到您通过所有断言。也就是说,检查字典单词、反向名称等。

有时生成所需的时间比预期的要长,但仍应该比您注意到的要快。

于 2009-01-13T18:39:31.167 回答
2

您可以使用OpenSSL 的随机生成器,然后对其进行 base64 编码。(不会得到各种随机字符,但会得到很多。)。遗憾的是,它也不会执行类似的字符密码位。我最喜欢的生成器在这里,它提供了您正在谈论的功能。(遗憾的是,仅限网络)

于 2009-01-13T19:01:45.163 回答
2

APG(自动密码生成器)实现了除您的最后一个要求之外的所有要求(没有字典单词/用户名/重复字符)。它包括可发音和完全随机的密码生成算法。可发音的密码如下所示:

耶夫盖伊拉
克利沙霍普
犹太人Ams8
RacMevOm
杜赫姆奇&
雷克桑~

它是用 C 语言编写的,可以在类似 BSD 的许可证下使用。

从密码学上讲,我不确定您的最后一个要求是否有效......?如果密码生成是真正随机的,那么密码 的aaaaaaaa可能性与密码的 相同6-n&1jIK,并且如果您的攻击者知道您的算法,那么通过禁止密码之类aaaaaaaa的,您正在减少攻击者的搜索空间。

于 2009-01-13T19:09:33.353 回答
1

您可以尝试使用TRNG设备加上一些众所周知的算法,这是最好的方法;)

于 2009-01-13T18:37:22.357 回答
1

有几个来源使用的书面要求,例如FIPS 181

我建议查看流行的自动密码生成器实用程序的文档。查看它提供的选项和功能可能对您有很大帮助。

此外,请检查您生成的密码,使其符合您的应用程序的阈值。

维基百科还列出了一些现有的设计和标准。

于 2009-01-13T19:10:26.487 回答