我正在我的项目user management
工作,我到了需要将passwords
存储在database
中的部分。我读到password
应该crypt
与salt
并保持在一起。但是,我似乎没有找到如何为每个新random salt
生成user
。
任何人?
答案 0 :(得分:2)
我建议您使用CPasswordHelper。
答案 1 :(得分:0)
尝试这样的事情
$salt = openssl_random_pseudo_bytes(22);
$salt = '$2a$%13$' . strtr($salt, array('_' => '.', '~' => '/'));
$password_hash = crypt($form->password, $salt);
和
if ($password_hash === crypt($form->password, $password_hash))
// password is correct
else
// password is wrong
答案 2 :(得分:0)
与您的回答并不严格相关,但我使用了这个优秀的扩展Yii extension,它可以避免在Yii中创建和存储密码的所有猜测
答案 3 :(得分:0)
乔的回答非常好。我实际上建议使用YiiPassword(https://github.com/phpnode/YiiPassword),因为它为您提供了很大的灵活性。
但是,是的,当谈到密码和安全性时,远最好不要重新发明轮子。除非你非常小心,否则你最终可能会遇到安全问题。
答案 4 :(得分:0)
尝试$this -> salt = uniqid('',true);
并使用$this->password = $this->hashPassword($this->password, $this->salt);}
进行盐加密用户密码
答案 5 :(得分:0)
我不熟悉Yii,但实际上您应该能够使用PHP的本机函数password_hash()来生成散列,并使用函数password_verify()来检查密码是否与散列匹配。此函数将处理所有棘手的部分,如生成安全盐,并将在生成的哈希中包含salt。
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);
// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);