【发布时间】:2010-10-01 05:03:48
【问题描述】:
想用 C++ 创建一个强密码。有什么建议吗?
我认为它应该使用 alpha(上 及以下)、数字、特殊 字符。
如果能够 指定最小长度。
最好避免使用字符 难以在视觉上区分的 比如“O”和“O”
最好取消所有 字符相同,字典单词, 颠倒的词,名字。
还有其他提示吗?我在哪里可以找到这样的代码?
【问题讨论】:
想用 C++ 创建一个强密码。有什么建议吗?
我认为它应该使用 alpha(上 及以下)、数字、特殊 字符。
如果能够 指定最小长度。
最好避免使用字符 难以在视觉上区分的 比如“O”和“O”
最好取消所有 字符相同,字典单词, 颠倒的词,名字。
还有其他提示吗?我在哪里可以找到这样的代码?
【问题讨论】:
有几种方法。简单的不一定是最好的
创建一个代表您要定义的所有字符的字符串(意思是,没有 O 或 0,等等),然后用该集合中的随机字符填充一个随机长度的字符串。
下一步是继续生成,直到您通过所有断言。即检查字典单词、反向名称等。
有时生成所需的时间比预期的要长,但仍应该比您注意到的要快。
【讨论】:
APG(自动密码生成器)实现了除您的最后一个要求之外的所有要求(没有字典单词/用户名/重复字符)。它包括可发音和完全随机的密码生成算法。可发音的密码如下所示:
yevGaijra 克利沙霍普 犹太人Ams8 RacMevOm 杜赫姆奇& raicsant~
它是用 C 语言编写的,可在类似 BSD 的许可下使用。
从密码学上讲,我不确定您的最后一个要求是否有效...?如果密码生成是真正随机的,那么aaaaaaaa 的密码与6-n&1jIK 的密码一样可能,如果你的攻击者知道你的算法,那么通过禁止aaaaaaaa 之类的密码,你正在减少攻击者的搜索空间。
【讨论】:
您可以使用OpenSSL's random generator,然后对其进行base64 编码。 (不会得到各种随机字符,但会得到很多。)。遗憾的是,它也不会执行类似的字符密码位。我最喜欢的生成器是here,它提供了您正在谈论的功能。 (遗憾的是,仅限网络)
【讨论】:
你可以试试TRNG 设备加上一些很好的known algorithms, 最好的方法;)
【讨论】:
有几个来源使用的记录要求,例如FIPS 181。
我建议查看流行的Automated Password Generator 实用程序的文档。查看它提供的选项和功能可能对您有很大帮助。
另外,请查看checking 您生成的密码,使其符合您的应用程序的阈值。
维基百科还列出了一些existing designs 和标准。
【讨论】: