在随机生成的密码中强制执行密码复杂性要求会使它们更安全吗?

时间:2017-01-20 06:46:44

标签: security passwords

我遇到了一些看起来像这样的代码:

function generatePassword() {
  let password;
  do {
    password = generateRandomString();
  } while (!checkPasswordComplexity(password));
  return password;
}

假设generateRandomString()返回所需字符集的真正随机字符串,checkPasswordComplexity()检查密码是否包含某些预定义的最小/小写/数字/特殊字符数。

基本上它会尝试生成一个随机密码,检查某些复杂性要求,如果检查失败,它会再次尝试。

第一个问题:

这实际上比仅返回generateRandomString的第一个结果更安全吗?

第二个问题:

如果这实际上是一个好习惯,是否有更有效(但仍然安全)的方式来直接生成满足复杂性要求的密码?

1 个答案:

答案 0 :(得分:0)

开始回答我自己的问题:

第一个问题:

一方面,密码破解者可能从较不复杂的候选密码开始。另一方面,如果破解者知道您的复杂性要求,这实际上是减少了搜索空间。在实践中,我不知道哪个更好。

第二个问题:

如果您需要长度为10的密码中的2个特殊字符,则从特殊字符集中随机选择2个字符,然后将它们放在最终密码中的随机位置。然后用整个字符集中的随机字符填充剩余的8个位置。