mcrypt已被弃用? – 如何在PHP中正确加密和保存密码?

有人告诉我,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已被弃用,因为它不再更新.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...