详谈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中文乱码
Nov 26 PHP
php生成zip文件类实例
Apr 07 PHP
php中二维数组排序问题方法详解
Aug 28 PHP
Zend Framework教程之资源(Resources)用法实例详解
Mar 14 PHP
php pdo oracle中文乱码的快速解决方法
May 16 PHP
值得分享的php+ajax实时聊天室
Jul 20 PHP
PHP实现原生态图片上传封装类方法
Nov 08 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
PHP实现的策略模式简单示例
Aug 25 PHP
PHP操作Redis数据库常用方法示例
Aug 25 PHP
Laravel框架学习笔记之批量更新数据功能
May 30 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
Jul 19 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操作xml入门之xml基本介绍及xml标签元素
2015/01/23 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
2010/01/12 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
2013/12/27 Javascript
表单提交前触发函数返回true表单才会提交
2014/03/11 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
smartcrop.js智能图片裁剪库
2015/10/14 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
2017/01/12 Javascript
在点击div中的p时,如何阻止事件冒泡
2017/02/07 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
微信公众平台 客服接口发消息的实现代码(Java接口开发)
2019/04/17 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
[10:42]Team Liquid Vs Newbee
2018/06/07 DOTA
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
解决python爬虫中有中文的url问题
2018/05/11 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
python的flask框架难学吗
2020/07/31 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
2014年圣诞节倒计时网页的制作过程
2014/12/05 HTML / CSS
英国知名化妆品网站:Revolution Beauty(原TAM Beauty)
2018/02/28 全球购物
英国知名美妆护肤在线商城:Zest Beauty
2018/04/24 全球购物
毕业生求职自荐书范文
2014/03/27 职场文书
幼儿园老师寄语
2014/04/03 职场文书
银行职员自我鉴定
2014/04/20 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
加强作风建设心得体会
2014/10/22 职场文书
硕士毕业论文导师评语
2014/12/31 职场文书
毕业证明模板
2015/06/19 职场文书
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
2021/04/01 PHP