使用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
}
}
答案 0 :(得分:3)
哈希是固定的(或至少是最大的)长度。
严格来说,bcrypt密码长度有一个上限,但如果你超过它就没有任何反应。它是55(或者可能是72,取决于你问的是谁)。
如上所述,限制密码长度是不好的做法,但实际上您可能希望将密码截断为1024个字符,以确保没有人在您的服务器上玩傻警。
答案 1 :(得分:1)
散列算法可以采用任何长度的变量(或类型 - 它甚至不必是字符串),并输出该变量的计算“散列”。
除了密码之外,哈希的另一个常见用途是为可下载文件提供验证密钥 - 即“这里是下载链接,这里是文件的哈希值,因此您可以证明您收到的副本没有'被篡改了“。这通常用于CD或DVD图像这样大的文件,所以输入长度肯定没有限制。
所以简短的答案是否定的,您的密码字段不需要最大长度。
(事实上,黑客寻找指定密码最大长度的网站,假设这意味着他们没有散列密码并且容易受到攻击)
回答问题的其他部分:是的,假设您每次都使用相同的哈希算法,计算出的哈希值总是相同的长度。