详谈PHP中的密码安全性Password Hashing


Posted in PHP onFebruary 04, 2017

如果你还在用md5加密,建议看看下方密码加密和验证方式。

先看一个简单的Password Hashing例子:

<?php

//require 'password.php';
/**
 * 正确的密码是secret-password
 * $passwordHash 是hash 后存储的密码
 * password_verify()用于将用户输入的密码和数据库存储的密码比对。成功返回true,否则false
 */
$passwordHash = password_hash('secret-password', PASSWORD_DEFAULT);
echo $passwordHash;
if (password_verify('bad-password', $passwordHash)) {
  // Correct Password
  echo 'Correct Password';
} else {
  echo 'Wrong password';
  // Wrong password
}

下方代码提供了一个完整的模拟的 User 类,在这个类中,通过使用Password Hashing,既能安全地处理用户的密码,又能支持未来不断变化的安全需求。

<?php
class User
{
  // Store password options so that rehash & hash can share them:
  const HASH = PASSWORD_DEFAULT;
  const COST = 14;//可以确定该算法应多复杂,进而确定生成哈希值将花费多长时间。(将此值视为更改算法本身重新运行的次数,以减缓计算。)

  // Internal data storage about the user:
  public $data;

  // Mock constructor:
  public function __construct() {
    // Read data from the database, storing it into $data such as:
    // $data->passwordHash and $data->username
    $this->data = new stdClass();
    $this->data->passwordHash = 'dbd014125a4bad51db85f27279f1040a';
  }

  // Mock save functionality
  public function save() {
    // Store the data from $data back into the database
  }

  // Allow for changing a new password:
  public function setPassword($password) {
    $this->data->passwordHash = password_hash($password, self::HASH, ['cost' => self::COST]);
  }

  // Logic for logging a user in:
  public function login($password) {
    // First see if they gave the right password:
    echo "Login: ", $this->data->passwordHash, "\n";
    if (password_verify($password, $this->data->passwordHash)) {
      // Success - Now see if their password needs rehashed
      if (password_needs_rehash($this->data->passwordHash, self::HASH, ['cost' => self::COST])) {
        // We need to rehash the password, and save it. Just call setPassword
        $this->setPassword($password);
        $this->save();
      }
      return true; // Or do what you need to mark the user as logged in.
    }
    return false;
  }
}

以上这篇详谈PHP中的密码安全性Password Hashing就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP开发大型项目的一点经验
Oct 09 PHP
php数组应用之比较两个时间的相减排序
Aug 18 PHP
不用mod_rewrite直接用php实现伪静态化页面代码
Oct 04 PHP
基于OpenCV的PHP图像人脸识别技术
Oct 11 PHP
PHP 引用文件技巧
Mar 02 PHP
php命名空间学习详解
Feb 27 PHP
Yii控制器中filter过滤器用法分析
Jul 15 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
May 12 PHP
PHP 实现手机端APP支付宝支付功能
Jun 07 PHP
yii2 url重写并隐藏index.php方法
Dec 10 PHP
PHP写API输出的时用echo的原因详解
Apr 28 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
Aug 17 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
Feb 04 #PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
Feb 04 #PHP
Yii2下session跨域名共存的解决方案
Feb 04 #PHP
浅谈PHP的$_SERVER[SERVER_NAME]
Feb 04 #PHP
php基于dom实现读取图书xml格式数据的方法
Feb 03 #PHP
php基于dom实现的图书xml格式数据示例
Feb 03 #PHP
PHP遍历目录文件的常用方法小结
Feb 03 #PHP
You might like
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
javascript中普通函数的使用介绍
2013/12/19 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
Javascript中判断对象是否为空
2015/06/10 Javascript
基于jQuery实现返回顶部实例代码
2016/01/01 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
2016/07/18 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
详解angular 中的自定义指令之详解API
2017/06/20 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
2018/09/19 Javascript
Vue.js标签页组件使用方法详解
2019/10/19 Javascript
Vue中常用rules校验规则(实例代码)
2019/11/14 Javascript
简单了解JS打开url的方法
2020/02/21 Javascript
[02:43]DOTA2英雄基础教程 半人马战行者
2014/01/13 DOTA
[00:36]DOTA2上海特级锦标赛 Archon战队宣传片
2016/03/04 DOTA
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python使用Apriori算法进行关联性解析
2017/12/21 Python
Python实现网站表单提交和模板
2019/01/15 Python
python石头剪刀布小游戏(三局两胜制)
2021/01/20 Python
Python3中编码与解码之Unicode与bytes的讲解
2019/02/28 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
python里运用私有属性和方法总结
2019/07/08 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
Django websocket原理及功能实现代码
2020/11/14 Python
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
电子商务求职信
2014/06/15 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
学生犯错保证书
2015/05/09 职场文书
硕士毕业答辩开场白
2015/05/27 职场文书
结婚纪念日感言
2015/08/01 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL