如何在C++中创建强密码字符串?

问题描述:

想在C++中创建一个强密码。有什么建议么?如何在C++中创建强密码字符串?

  • 我假定它应该使用α(上 和下部),数字,特殊字符 。

  • 这将是一件好事,能够 指定最小长度。

  • 这将是巨大的,以避免那些难以从视觉上分辨 像“O”和“O”字

  • 这将是巨大的,无效的所有 人物一样,字典中的字, 逆转的话,名字。

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

APG(自动密码生成器)实现除了最后一项要求之外的所有内容(无字典词/用户名/重复字符)。它包括可发音和完全随机的密码生成算法。可指认的密码看起来是这样的:

yevGaijra 
clishahopp 
jewnAms8 
RacMevOm 
Duheamch& 
raicsant~

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

密码方面,我不确定你最后的要求是否有效...?如果密码的生成是真正随机的,那么密码aaaaaaaa与密码6-n&1jIK的密码相同,如果攻击者知道你的算法,那么通过禁止密码aaaaaaaa,你可以减少攻击者的搜索空间。

+0

我喜欢关于德国Enigma加密机器如何被部分破坏的故事,它注意到它从未将明文字符加密为相同的密文字符,它*总是*选择了不同的字母。 – 2009-01-13 20:59:12

你可以尝试TRNG设备加上一些好known algorithms, 最好的办法铅与它;)

有几种方法。容易不一定是最好的

创建一个字符串,表示您想要定义的所有字符(意思是说,不是O或0的,不管),然后用随机字符填充随机字符串。

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

有些时候,生成时间会比预期的要长,但仍然会比您注意到的要快。

你可以使用OpenSSL's random generator,然后base64对它进行编码。 (不会给你所有的随机角色,但会让你很多。)可悲的是,它也不会做类似字符的密码。我最喜欢的生成器是here,它提供了你正在讨论的功能。 (仅限网络,可悲)

有几个来源使用的记录要求,如FIPS 181

我会建议看看流行的Automated Password Generator实用程序的文档。看看它提供的选项和功能对你来说可能会有很长的路要走。

此外,请查看checking您的生成密码,以便它们符合您的应用程序的阈值。

*还列出了一些existing designs和标准。