我被告知,php mcrypt已被弃用,我应该使用一种不同的方法来哈希和加盐我的密码。
这是我当前所做的:
public function saveNewUser(array $data) {
$passwd = $this->mysqli->real_escape_string($datas['passwd']);
$options = [
'cost' => 11,
'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM)
];
$hashed_passwd = password_hash($passwd, PASSWORD_BCRYPT, $options);
$this->optin_hash = md5(rand());
//...
//save user in DB with hashed passwd
登录:
if (password_verify($_POST['user_password'], $result_row->gmw_usr_passwd)) {//do some login stuff}
1.) 最新和最安全的密码加密和保存方法是什么?能否提供正确保存密码的用法示例或链接以及如何验证登录?
2.) 在PHP文档中,我读到了有关password_hash的一些内容:
password_hash()使用强大的单向哈希算法创建一个新的密码哈希。password_hash()与crypt()兼容。因此,由crypt()创建的密码哈希可以与password_hash()一起使用。
(...)
警告 从PHP 7.0.0开始,salt选项已被弃用。现在最好只使用默认生成的salt。
2.a) password_hash是我使用的东西的替代品吗?
2.b) 那么我不需要自己添加盐了吗?
2.c) 那么我使用的blowfish算法和我添加的所有其他步骤都不再必要了吗?
2.d) 当我使用password_hash时,如何验证登录密码?
编辑:抱歉,我看到我已经使用了password_hash(那是一个非常短的编码夜)。
如Artjom B所述,我不需要mcrypt (?)
password_hash()
将自动生成一个安全的盐。使用mcrypt_create_iv()
创建的盐也不适用于BCrypt。 - martinstoecklipassword_hash()
自动生成即可。random_bytes()
。如果您的代码需要在PHP 5项目上工作,请获取https://github.com/paragonie/random_compat的副本并开始工作。