2013-01-15 59 views
1

當使用Laravel的Hash::make()方法(即bcrypt):使用PHP bcrypt(通過Laravel的Hash :: make)時是否有最大輸入長度?

  • 是有祕密的最大輸入長度?
  • 如果超過此長度,會發生什麼情況?
  • 返回的值是否始終具有相同的長度?

我想知道用戶註冊表單中的密碼字段是否應該根據最大長度進行驗證。形式也被類似處理:

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 
    } 
} 
+1

不,沒有,是的。 – SDC

回答

1

的散列算法可以採取的可變任何長度(或類型 - 它甚至不必須是一個字符串),並輸出計算的「散列」的變量。

除了密碼之外,哈希的另一個常見用途是爲可下載文件提供驗證密鑰 - 即「這裏是下載鏈接,這裏是文件的哈希值,因此您可以證明您收到的副本沒有沒有被篡改過「。這通常用於與CD或DVD圖像一樣大的文件,所以對輸入長度沒有任何限制。

所以簡短的答案是否定的,沒有必要爲您的密碼字段的最大長度。

(事實上,黑客尋找那些指定了密碼的最大長度網站,這樣的假設,這意味着他們沒有自己的散列密碼,很容易受到攻擊)

要回答的另一部分的問題:是的,假設您每次都使用相同的哈希算法,計算出的哈希值始終是相同的長度。

+1

我不認爲這實際上是正確的,http://security.stackexchange.com/questions/39849/does-bcrypt-have-a-maximum-password-length –

2

散列固定(或至少最大)長度。

嚴格來說,密碼長度有一個上限,但如果超過密碼長度,則不會有任何反應。這是55(或者72,取決於你問誰)角色。

如上所述,限制密碼長度是一種不好的做法,但實際上您可能想要將密碼截斷爲1024個字符,以確保沒有人在您的服務器上播放愚蠢的問題。

相關問題