Security 在随机生成的密码中强制执行密码复杂性要求是否会使它们更安全?
我遇到了一些代码,大致如下所示:Security 在随机生成的密码中强制执行密码复杂性要求是否会使它们更安全?,security,passwords,Security,Passwords,我遇到了一些代码,大致如下所示: function generatePassword() { let password; do { password = generateRandomString(); } while (!checkPasswordComplexity(password)); return password; } 假设generateRandomString()返回所需字符集的真正随机字符串,并且checkPasswordComplexity()检查密码
function generatePassword() {
let password;
do {
password = generateRandomString();
} while (!checkPasswordComplexity(password));
return password;
}
假设generateRandomString()
返回所需字符集的真正随机字符串,并且checkPasswordComplexity()
检查密码是否包含一些预定义的最小大小写/数字/特殊字符数
基本上,它会尝试生成一个随机密码,检查某些复杂度要求,如果检查失败,它会再次尝试
第一个问题:
这实际上比仅从generateRandomString
返回第一个结果更安全吗
第二个问题:
如果这实际上是一种良好的做法,那么有没有更有效(但仍然安全)的方法来直接生成满足复杂性要求的密码?开始回答我自己的问题: 第一个问题: 一方面,密码破解者可能从不太复杂的候选密码开始。另一方面,如果破解者知道你的复杂度要求,这实际上是在减少搜索空间。实际上,我不知道哪个更好 第二个问题:
例如,如果需要长度为10的密码中包含2个特殊字符,则从特殊字符集中随机选取2个字符,然后将其放置在最终密码中的随机位置。然后用整个字符集中的随机字符填充剩余的8个位置。开始回答我自己的问题: 第一个问题: 一方面,密码破解者可能从不太复杂的候选密码开始。另一方面,如果破解者知道你的复杂度要求,这实际上是在减少搜索空间。实际上,我不知道哪个更好 第二个问题: 例如,如果需要长度为10的密码中包含2个特殊字符,则从特殊字符集中随机选取2个字符,然后将其放置在最终密码中的随机位置。然后用整个字符集中的随机字符填充剩余的8个位置