详谈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防注入代码
Apr 07 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
Jul 03 PHP
ThinkPHP与PHPExcel冲突解决方法
Aug 08 PHP
php中如何防止表单的重复提交
Aug 02 PHP
php模仿asp Application对象在线人数统计实现方法
Jan 04 PHP
php通过递归方式复制目录和子目录的方法
Mar 13 PHP
php生成年月日下载列表的方法
Apr 24 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
Jun 19 PHP
Yii框架用户登录session丢失问题解决方法
Jan 07 PHP
php获取当前url地址的方法小结
Jan 10 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
May 05 PHP
YII2框架使用控制台命令的方法分析
Mar 18 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
业余方法DIY电子管FM收音机
2021/03/02 无线电
php ci框架验证码实例分析
2013/06/26 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
laravel数据库查询结果自动转数组修改实例
2021/02/27 PHP
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
深入探讨javascript中的数据类型
2015/03/04 Javascript
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
最全面的JS倒计时代码
2016/09/17 Javascript
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
基于原生js实现判断元素是否有指定class名
2020/07/11 Javascript
vue中v-model对select的绑定操作
2020/08/31 Javascript
通过Python爬虫代理IP快速增加博客阅读量
2016/12/14 Python
python3读取csv和xlsx文件的实例
2018/06/22 Python
Win10下python3.5和python2.7环境变量配置教程
2018/09/18 Python
Python实现的大数据分析操作系统日志功能示例
2019/02/11 Python
Python爬虫实现爬取百度百科词条功能实例
2019/04/05 Python
Python 使用多属性来进行排序
2019/09/01 Python
python3.7环境下安装Anaconda的教程图解
2019/09/10 Python
python实现测试工具(一)——命令行发送get请求
2020/10/19 Python
应用数学自荐书范文
2013/11/24 职场文书
自我鉴定怎么写
2014/01/12 职场文书
楼面经理岗位职责范本
2014/02/18 职场文书
公司业务员岗位职责
2014/03/18 职场文书
电子信息工程专业自荐书
2014/06/24 职场文书
美术社团活动总结
2014/06/27 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
2015年初三班主任工作总结
2015/05/21 职场文书
神秘岛读书笔记
2015/07/01 职场文书