2017-10-17 100 views
0
public function beforeSave(){ 
    $salt = "Acrec_$"; 
    $hashed = hash('sha512', $salt . $this->password); 
    $this->password = $hashed; 
} 

我正在使用自定義Salt和自定義哈希來加密用戶密碼,但現在我需要登錄用戶。SHA512和checkhash上的自定義鹽 - PhalconPHP

裏面的代碼loginAction();

$this->auth->check([ 
    'email' => $this->request->getPost('email'), 
    'password' => $this->request->getPost('password'), 
    'remember' => $this->request->getPost('remember') 
]); 
+0

鹽應該是每個用戶都是獨一無二的。此外,您不應該使用單個哈希輪來保護密碼,您應該使用諸如[bcrypt](https://en.wikipedia.org/wiki/Bcrypt)之類的算法,該算法使用多輪哈希來離線破解不可行。 – Phylogenesis

+0

'$ salt =「Acrec _ $」;'你應該把它放在單引號中。 '$'是php中的一個特殊字符。 –

+0

當我使用bcrypt它返回一個像這樣的字符串: 字符串(60) 「$ 2Y $ 08 $ bk5kV3BpZjlGanJDOEpPUO0CEBpTmlVAo8iCc5O4YsEk1c7004L8i」 –

回答

1

在爾康只需使用:

$password = $this->request->getPost('password'); 
$user->password = $this->security->hash($password); 

而且

$password = $this->request->getPost('password'); 
$user = Users::findFirst(); 
if ($this->security->checkHash($password, $user->password)) { 
    // any logic here 
} 

通過它使用bcrypt具有鹽內置的默認。

+0

鏈接[爾康安全散列(https://olddocs.phalconphp.com/en/3.0.0/ reference/security.html),它與['password_hash'](http://php.net/manual/en/function.password-hash.php)和['password_verify'](http://php.net) /manual/en/function.password-verify.php)。如果這是比'password_hash'更好的選擇/''password_verify'是未知的。 – zaph

+0

無論如何,它使用password_hash和password_verify。只是OOP包裝他們與其他方法安全的東西,如一些randomizer,csrf等 – Juri

0

隨着PHP使用password_hashpassword_verify,一對是安全和易於使用。

僅使用散列函數保存密碼驗證者是不夠的,僅僅添加鹽對提高安全性沒有多大作用。相反,用隨機鹽迭代HMAC約100ms持續時間,然後用散列表保存鹽。更好的是使用諸如PBKDF2,Rfc2898DeriveBytes,password_hash,Bcrypt,passlib.hash或類似功能的功能。關鍵是要讓攻擊者花費大量時間通過暴力破解密碼。