有人告诉我,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选项已被弃用.现在优选简单地使用默认生成的盐.
2.a)password_hash是我用过的替代品吗?
2.b)所以我不需要自己加盐?
2.c)我使用的河豚algorythm和我添加的所有其他步骤怎么样?它们不再是必要的了吗?
2.d)当我使用password_hash时,如何验证登录密码?
编辑:对不起,我看到我已经使用了password_hash(这是一个非常短的编码之夜).
正如Artjom B所描述的那样.我不需要mcrypt(?)
解决方法:
根据PHP 7.0的PHP文档,新的标准方法是使用password_hash来哈希原始密码,然后在登录时使用password_verify,以验证提供的密码的正确性.
这些函数是基本原理的包装器,如crypt(),因为它们会处理你和我永远不会想到的事情,比如选择正确的随机源来生成盐(你不能使用标准rand)加密功能).
来到2b和其他部分,你不需要自己添加盐,因为它是由PHP生成并包含在密码中,所有必要的步骤都是为你完成的.
您只需要在数据库中保存使用password_hash创建的散列密码,然后在登录时使用它,使用password_verify将其与用户提供的密码进行比较.
此外,是的mcrypt已被弃用,因为它不再更新.