随机密码生成条件

时间:2011-03-19 12:03:54

标签: algorithm passwords generator

我正在使用随机密码生成器来创建符合某些条件的密码,包括但不限于:

  • 最小长度:必须包含至少8个字符
  • 小写字母:必须包含小写字母(从一组中选择,以避免出现可能被误认为数字的问题)
  • 大写字母:必须包含大写字母(再次从一组中选择)
  • digits:必须包含数字

确保生成的密码满足所有这些要求的最佳算法方法是什么?

我不是在寻找一个完整的解决方案,我只需要一些好的想法和指导。

3 个答案:

答案 0 :(得分:6)

1)随机生成数字L,这将是您密码的确切长度。即,生成使其大于8
2)随机生成一个数字LL,它将是小写字母的数量。 LC必须在[1..L-2]范围内 3)随机生成数字LU为大写。必须在[1..L-LL-1]范围内 4)LD = L-LL-LU大写数字的数量
5)随机生成LL小写字母,LU大写字母和LD数字并将它们保存在列表(数组)中 6)随机乱洗阵列

HTH

答案 1 :(得分:4)

  • 创建一个包含-z,A - Z,0 - 9的字符数组(减去任何可能因问题而混淆的字符)
  • 连接数组中随机选择的8个字符
  • 测试结果以确定其是否满足要求
  • 如果不满足要求,请重新开始

算法通常应该在前几次迭代中成功,并使您不必执行混洗算法。

答案 2 :(得分:1)

还有一种替代亚美尼亚提出的精确结构。如果您的条件可以被高概率地满足那么:

  • 获取无限长度的随机字符串(流)
  • 懒惰地过滤掉可接受的字符(例如:大写||小写||数字)
  • 在流中跨步所需长度的窗口,当窗口属性正常时接受。

在惰性语言中,这是大约6行非样板代码,不需要任何改组。

编辑:是的,按照评论中的步骤移动窗口,而不是滑动窗口。谢谢!