要在我的应用程序中生成随机密码,我想使用Symfony Random Generator组件。
The documentation says this关于<input name="name" type="text" id="input1" size="30" maxlength="1000" placeholder="Enter Postcode or Area"/>
字符(null
)的可能性:
\0
方法返回一个二进制字符串,其中可能包含nextBytes()
字符。这可能会在几种常见情况下造成麻烦,例如 将此值存储在数据库中或将其作为数据库的一部分包含在内 URL。解决方案是散列\0
返回的值(要做 那个,你可以使用一个简单的nextBytes()
PHP函数。)
所以,我的问题是:如果方法返回md5()
个字符,那么用户必须使用它来写他的密码。
我怎么能处理这个问题,因为我无法弄清楚如何将null char写入登录表单。或者我在想法中遗漏了什么?
答案 0 :(得分:2)
你永远不应该使用SecureRandom
实用程序来生成密码 - 它只生成字节而不是字符(即使你使用字节作为字符,使用键盘很难输入一半的ASCII字符映射)
理论上,您可以在SecureRandom提供的数据上使用base64_encode
来生成可在键盘上输入的字符串。
如果您肯定想要生成随机密码,那么最好定义一个您想要使用的字符语料库,然后使用mt_rand
之类的字符来获取关键偏移量。 E.g。
$corpus = array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9));
$password = '';
for ($i = 0; $i < $passwordLength; i++) {
$password .= $corpus[ mt_rand(0, (count($corpus) - 1)) ];
}
return $password;
这些不是“安全”的随机密码,但随后会引发更多关于安全策略和更改密码等的讨论。