0

我正忙于为我的框架设计一个用户身份验证类,我目前使用的是前段时间从教程中获得的代码。与大多数程序员一样,我觉得我需要了解代码的作用并希望对其进行修改以使其更安全。我发现下面的版本在 Mac 上失败了,所以我需要重写它。这是我以前在身份验证类中的方法(用于注册帐户:

 // security is a config file with a global salt in $security->security_salt
 public function generate_crypt($password) {
    $security = new security();
    $crypt_salt = '$6$rounds=5000$' . uniqid() . "$";
    $password = $password . $security->security_salt;
    return crypt($password, $crypt_salt);
}

现在上面的例子只使用了 1 个全局盐,我觉得如果我为每个用户有一个单独的盐会更好,所以我正在考虑将其更改为:

/*
 * properties below are from methods, I am just putting it as
 * seperate variables to be understood a little better:
 *
 */

 private function generate_user_salt() {
       return hash('sha512',uniqid());
 }

 private function generate_crypt($password, $user_salt) {
    $security = new security_config();
    $password = $password . $security->security_salt;
    return crypt($password, $user_salt);
}

private register() {
      $user_salt = $this->generate_user_salt();
      $password = $this->generate_crypt($_POST['password'],$user_salt);
      // Write user to database where `salt`=>$user_salt and `password`=>$password;
}

要进行身份验证,我会这样做:

 // Data is retrieved from database and stored in a $this->credentials array property:
 private function validate_password() {
    $security = new security_config();
    $salted_password = $_POST['password'] . $security->security_salt;
    if (crypt($salted_password, $this->credentials['salt']) == $this->credentials['password']) {
        return true;
    }
}

我已经测试了上述内容,它似乎可以正常工作,但是,这是使用 crypt() 的正确方法吗?它是否安全?我正在尝试使用 2 个盐字符串,这样即使有一个安全桥并且有人获得了用户盐,他们仍然需要位于文件中的盐。

我希望在不支持某些功能或算法的不同平台出现问题的情况下,最大限度地利用现实的安全性。

这是安全的和/或我应该使用不同的方法吗?

4

0 回答 0