详谈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怎样调用MSSQL的存储过程
Oct 09 PHP
discuz authcode 经典php加密解密函数解析
Jul 12 PHP
PHP仿盗链代码
Jun 03 PHP
CI框架源码阅读,系统常量文件constants.php的配置
Feb 28 PHP
浅谈php函数serialize()与unserialize()的使用方法
Aug 19 PHP
php实现事件监听与触发的方法
Nov 21 PHP
discuz目录文件资料汇总
Dec 30 PHP
详解PHP编码转换函数应用技巧
Oct 22 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
Sep 28 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
Sep 04 PHP
php解决安全问题的方法实例
Sep 19 PHP
php获取微信openid方法总结
Oct 10 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笔记之:AOP的应用
2013/04/24 PHP
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
php实现学生管理系统
2020/03/21 PHP
php微信开发接入
2016/08/27 PHP
JavaScript Distilled 基础知识与函数
2010/04/07 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
2013/11/08 Javascript
JS批量修改PS中图层名称的方法
2014/01/26 Javascript
JavaScript 面向对象与原型
2015/04/10 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
JavaScript Split()方法
2015/12/18 Javascript
分享几种比较简单实用的JavaScript tabel切换
2015/12/31 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
详解vue事件对象、冒泡、阻止默认行为
2017/03/20 Javascript
JavaScript面向对象精要(上部)
2017/09/12 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
python判断字符串是否是json格式方法分享
2017/11/07 Python
python编写分类决策树的代码
2017/12/21 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
python实现感知机线性分类模型示例代码
2019/06/02 Python
python numpy生成等差数列、等比数列的实例
2020/02/25 Python
分享CSS3中必须要知道的10个顶级命令
2012/04/26 HTML / CSS
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
生产经理的自我评价分享
2013/11/07 职场文书
畜牧兽医本科生的自我评价
2014/03/03 职场文书
《小猪家的桃花树》教学反思
2014/04/11 职场文书
外语专业毕业生自荐信
2014/04/14 职场文书
道德大讲堂实施方案
2014/05/14 职场文书
2014年最新学校运动会广播稿
2014/09/17 职场文书
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python