tes*_*ing 13 php encryption hash crypt
我目前正在实施登录系统.我想将密码和salt存储在数据库中.现在我发现有一个hash()和一个crypt()函数似乎做同样的事情(对SHA512有效).
hash()是更新的,似乎支持更多的哈希算法比crypt().还是我应该知道/关心的其他差异?
编辑:
function generatePasswordHash($password){
$salt = base64_encode(mcrypt_create_iv(8));
$calculatedPasswordHash = crypt($password, '$1$' . $salt . '$');
return $calculatedPasswordHash;
}
Run Code Online (Sandbox Code Playgroud)
结果看起来像 $1$Qh6ByGJ9$zLn3yq62egvmc9D7SzA2u.
这是我的密码检查功能:
function checkLoginData($username, $password){
global $db;
$sql = "SELECT * FROM users WHERE username = :username";
$result = $db->ExecuteQuery($sql, array("username"=>$username));
if(!empty($result)){
$result = $result[0];
$savedPasswordHash = $result['password'];
$splitted = explode("$", $savedPasswordHash);
$salt = $splitted[2];
$calculatedPasswordHash = crypt($password, '$1$' . $salt . '$');
if($savedPasswordHash === $calculatedPasswordHash){
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
Cod*_*aos 16
使用hash哈希计算,例如完整性检查.它直接使用指定的散列算法.
crypt是一个特殊目的的功能.它用于密码散列和密钥派生.你需要传入一个盐,它间接地决定了使用的散列方案.即使你选择CRYPT_SHA512这不是简单的SHA512.它是使用SHA512作为构建块的密钥派生函数.特别是这样的方案故意缓慢(隐藏暴力攻击)并以安全的方式组合盐和密码.
对于日志系统中的密码散列,crypt显然是正确的选择.
| 归档时间: |
|
| 查看次数: |
9836 次 |
| 最近记录: |