如何在yii中生成盐?

时间:2013-12-04 16:43:35

标签: yii salt

我正在我的项目user management工作,我到了需要将passwords存储在database中的部分。我读到password应该cryptsalt并保持在一起。但是,我似乎没有找到如何为每个新random salt生成user。 任何人?

6 个答案:

答案 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

Source

答案 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);