2

当使用 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
    }
}
4

2 回答 2

4

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

严格来说,bcrypt 密码长度是有上限的,但是超过了就什么都不会发生。它是 55 个(或者可能是 72 个,取决于你问谁)字符。

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

于 2013-04-25T10:41:32.063 回答
2

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

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

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

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

要回答您问题的另一部分:是的,假设您每次都使用相同的哈希算法,计算出的哈希值始终是相同的长度。

于 2013-01-15T14:12:12.713 回答