Symfony 2使用SecureRandom和“null”字符:如何管理它

时间:2015-08-10 12:12:09

标签: php security symfony passwords md5

要在我的应用程序中生成随机密码,我想使用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写入登录表单。或者我在想法中遗漏了什么?

1 个答案:

答案 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;

这些不是“安全”的随机密码,但随后会引发更多关于安全策略和更改密码等的讨论。