我遇到了一些看起来像这样的代码:
function generatePassword() {
let password;
do {
password = generateRandomString();
} while (!checkPasswordComplexity(password));
return password;
}
假设generateRandomString()
返回所需字符集的真正随机字符串,checkPasswordComplexity()
检查密码是否包含某些预定义的最小/小写/数字/特殊字符数。
基本上它会尝试生成一个随机密码,检查某些复杂性要求,如果检查失败,它会再次尝试。
第一个问题:
这实际上比仅返回generateRandomString
的第一个结果更安全吗?
第二个问题:
如果这实际上是一个好习惯,是否有更有效(但仍然安全)的方式来直接生成满足复杂性要求的密码?
答案 0 :(得分:0)
开始回答我自己的问题:
第一个问题:
一方面,密码破解者可能从较不复杂的候选密码开始。另一方面,如果破解者知道您的复杂性要求,这实际上是减少了搜索空间。在实践中,我不知道哪个更好。
第二个问题:
如果您需要长度为10的密码中的2个特殊字符,则从特殊字符集中随机选择2个字符,然后将它们放在最终密码中的随机位置。然后用整个字符集中的随机字符填充剩余的8个位置。