【问题标题】:Symfony 2 Util SecureRandom and "null" character: how to manage itSymfony 2 Util SecureRandom 和“空”字符:如何管理它
【发布时间】:2015-11-02 08:21:06
【问题描述】:

要在我的应用程序中生成随机密码,我想使用 Symfony 随机生成器组件。

The documentation says this 关于null 字符(\0)的可能性:

nextBytes() 方法返回一个二进制字符串,其中可能包含 \0 字符。这可能会在几种常见情况下引起麻烦,例如 将此值存储在数据库中或将其作为 网址。解决方法是对nextBytes()返回的值进行哈希处理(做 那个,你可以使用一个简单的md5() PHP 函数)。

所以,我的问题是:如果该方法返回一个nullchar,那么用户将不得不使用它来编写他的密码。

我该如何处理这个问题,因为我不知道如何将空字符写入登录表单。还是我在想什么?

【问题讨论】:

    标签: php security symfony passwords md5


    【解决方案1】:

    您永远不应该使用SecureRandom 实用程序来生成密码 - 它只生成字节而不是字符(即使您将字节用作字符,一半的 ASCII 字符映射也很难使用键盘输入)。

    理论上,您可以对 SecureRandom 提供的数据使用 base64_encode 来生成可在键盘上输入的字符串。

    如果您确实想生成随机密码,那么您最好定义一个要使用的字符库,然后使用mt_rand 之类的东西来获取密钥偏移量。例如

    $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;
    

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

    【讨论】:

    • 当我们有一个稳定的 1.0.0 版本时,您可以在 PHP 5 中使用random_compat 获取random_int()
    • 注意:当random_compat稳定时,我认为Symfony团队有兴趣添加它。
    猜你喜欢
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 2010-12-14
    • 2013-03-25
    • 2012-10-01
    相关资源
    最近更新 更多