使用bcrypt计算密码哈希值

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mu_mu111/article/details/85415173
  • 我们应该计算密码的哈希值而不是加密他,加密是双向算法,而哈希是单项算法
  • 目前公认的最安全的哈希算法是bcrypt
  • 开发web应用时,会在两处地方用到密码哈希API:注册和登录用户,以下为操作代码。
/**
 * 注册用户时 计算密码哈希值
 * 密码的哈希值应存储在VARCHAR(255)类型的数据库列中。便于以后存储比现在的bcrypt算法得到的哈希值更长的密码
 * @param string $id
 * @param string $password
 * @throws EXception
 */

function user_register($id, $password) {
    // 计算密码哈希值, PASSEWORD_DEFAULT表示使用bcrypt算法, cost——工作因子,表示计算次数
    $passwordHash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 10]);
    if ($passwordHash === false) {
        throw new \EXception('Password hash failed');
    }
    //创建账户
    $user = new User();
    $user->id = $id;
    $user->password = $passwordHash;
    $user->save();
}

function user_login($id, $password) {
    //查找账户
    $user = User::findById($id);

    //验证密码和账户密码的哈希值是否匹配
    if (password_verify($password, $user->password) === false) {
        throw new \Exception("Invild password");
    }
    //如果需要重新计算密码的哈希值
    $currentHashAlgorithm = PASSWORD_DEFAULT;
    $currentHashOptions = array('cost' => 15);
    $passwordNeedRehash = password_needs_rehash($user->password, $currentHashAlgorithm, $currentHashOptions);

    if ($passwordNeedRehash === true) {
        $user->password = password_hash($password, $currentHashAlgorithm, $currentHashOptions);
        $user->save();
    }
}

try{
    user_register('allen', '666');
} catch (Exception $e) {
    echo $e->getMessage();
}

猜你喜欢

转载自blog.csdn.net/mu_mu111/article/details/85415173
今日推荐