【发布时间】:2020-12-16 07:29:19
【问题描述】:
创建密码时,有时我需要密码包含大写、小写、数字或符号。如果我这样创建密码,则不能保证每个密码都被表示:
$input = 'a..zA..Z0..9$!_'; // generally the whole allowed alphabet
while (strlen($password) < 10) {
$password .= securelyPickRandomCharacterFromString($input);
}
在这种情况下,随机过程(即使它是安全且完全随机的)有可能只选择小写字母。
我可以想到一些幼稚的方法,例如首先从每个组中选择 1 个,然后随机填充其余的。但这不会像 random_bytes() 那样在密码学上是安全的。也许之后洗牌?
什么是生成包含每个“组”字符的密码的好且安全的算法。
注意:密码要求通常是针对外部系统的,我无法控制。
【问题讨论】:
-
如您所说,从每个组中选择一个,其余的从所有组中随机选择。然后随机播放。
-
如果您丢弃其中一个
$input字符,那么使用简单的方法会更容易,因为长度是 256 的除数。否则,您选择的标准库通常具有辅助函数在这里实现一些有用的东西。如果您只有random_bytes()可用,那么它是可行的,但具有挑战性。
标签: random cryptography passwords