0
我添加了一個散列函數在Laravel 5到註冊商使用PHP散列函數:Laravel 5與第二散列函數登錄問題
$password = $data['password'];
$salt = uniqid(mt_rand(), true);
$saltpass = $password.$salt;
$hashed = hash('sha256', $saltpass, false);
$b_hashed = bcrypt($hashed);
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => $b_hashed,
'salt' => $salt,
]);
該登記功能工作,最終密碼($ b_hashed)和所述鹽是保存到數據庫中。但是,問題在於登錄。我嘗試用保存的salt對用戶輸入密碼進行散列,然後將其傳遞到AthenticatesAndRegistersUsers.php中的postLogin函數的憑證中,但它不起作用。下面是代碼:
{
$request->only('email', 'password');
$record = \DB::table('users')->where('email', $credentials['email']->get();
$record = $record[0];
$pass = $credentials['password'];
$salt = $record->salt;
$pass = $pass.$salt;
$hashed = hash("sha256", $pass, false);
$credentials = array(
'email' => $email,
'password' => $hashed);
$this->validate($request, [
'email' => 'required|email', 'password' => 'required',
]);
if ($this->auth->attempt($credentials, $request->has('remember')))
{
return redirect()->intended($this->redirectPath());
}
return redirect($this->loginPath())
->withInput($request->only('email', 'remember'))
->withErrors([
'email' => $this->getFailedLoginMessage(),
]);
}
爲什麼要實現自己的散列方案? Laravel將默認計算一個BCrypt哈希,並自動創建一個鹽並將其與哈希存儲在一起。沒有理由將SHA256與自己的salt一起使用,SHA不適合散列密碼。 – martinstoeckli
我沒有實現我自己的哈希方案,而是在Laravel中爲現有的哈希方案添加了一個哈希級別。 – user4741755
@ user4741755爲什麼?哈希是哈希? –