详谈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中与数组相关的函数
Mar 22 PHP
PHP实现异步调用方法研究与分享
Oct 27 PHP
PHP编程风格规范分享
Jan 15 PHP
php实现加减法验证码代码
Feb 14 PHP
php操作mysql数据库的基本类代码
Feb 25 PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
Jul 18 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
Nov 19 PHP
Laravel 5框架学习之Laravel入门和新建项目
Apr 07 PHP
Laravel中使用Queue的最基本操作教程
Dec 27 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
Jun 05 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
Oct 02 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 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
Javascript 更新 JavaScript 数组的 uniq 方法
2008/01/23 Javascript
JavaScript 组件之旅(一)分析和设计
2009/10/28 Javascript
使用js获取QueryString的方法小结
2010/02/28 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
2015/03/04 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
2017/01/09 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
2017/03/06 Javascript
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
node全局变量__dirname与__filename的区别
2019/01/14 Javascript
简述pm2常用命令集合及配置文件说明
2019/05/30 Javascript
微信小程序自定义多列选择器使用详解
2019/06/21 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
sqlalchemy对象转dict的示例
2014/04/22 Python
Python中的变量和作用域详解
2016/07/13 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
Python爬虫使用bs4方法实现数据解析
2020/08/25 Python
详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用
2020/08/24 HTML / CSS
HTML5 解析规则分析
2009/08/14 HTML / CSS
HTML5实现WebSocket协议原理浅析
2014/07/07 HTML / CSS
Html5定位终极解决方案
2020/02/05 HTML / CSS
捷克家电和家具购物网站:OKAY.cz
2020/07/23 全球购物
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
优秀士兵先进事迹
2014/02/06 职场文书
美术学专业求职信
2014/07/23 职场文书
安全环保演讲稿
2014/08/28 职场文书
2015年政协委员工作总结
2015/05/20 职场文书
首席执行官观后感
2015/06/03 职场文书
党员证明模板
2015/06/19 职场文书
Java 将PPT幻灯片转为HTML文件的实现思路
2021/06/11 Java/Android
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript