2017-10-17 59 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或类似功能的功能。关键是要让攻击者花费大量时间通过暴力破解密码。