使用PHP bcrypt时是否有最大输入长度(通过Laravel的Hash :: make)?

时间:2013-01-15 14:02:11

标签: php hash passwords laravel bcrypt

使用Laravel的 Hash::make() 方法(即bcrypt)时:

  • 秘密有最大输入长度吗?
  • 如果超过此长度会怎样?
  • 返回的值总是具有相同的长度吗?

我想知道用户注册表单中的密码字段是否应该以最大长度进行验证。表单的处理方式如下:

public function action_register()
{
    $rules = array(
        'username' => 'required',
        'password' => 'required|min:10'
    );

    $validation = Validator::make(Input::all(), $rules);

    if($validation->passes())
    {
        $user = new User;
        $user->name = Input::get('name');
        $user->password = Input::get('password');
        $user->save();
        //todo - report success
    }
    else
    {
        //todo - report errors
    }
}

2 个答案:

答案 0 :(得分:3)

哈希是固定的(或至少是最大的)长度。

严格来说,bcrypt密码长度有一个上限,但如果你超过它就没有任何反应。它是55(或者可能是72,取决于你问的是谁)。

如上所述,限制密码长度是不好的做法,但实际上您可能希望将密码截断为1024个字符,以确保没有人在您的服务器上玩傻警。

答案 1 :(得分:1)

散列算法可以采用任何长度的变量(或类型 - 它甚至不必是字符串),并输出该变量的计算“散列”。

除了密码之外,哈希的另一个常见用途是为可下载文件提供验证密钥 - 即“这里是下载链接,这里是文件的哈希值,因此您可以证明您收到的副本没有'被篡改了“。这通常用于CD或DVD图像这样大的文件,所以输入长度肯定没有限制。

所以简短的答案是否定的,您的密码字段不需要最大长度。

(事实上,黑客寻找指定密码最大长度的网站,假设这意味着他们没有散列密码并且容易受到攻击)

回答问题的其他部分:是的,假设您每次都使用相同的哈希算法,计算出的哈希值总是相同的长度。