详谈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 相关文章推荐
《APMServ 5.1.2》使用图解
Oct 23 PHP
一些常用的php函数
Dec 06 PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
Apr 13 PHP
PHP限制页面只能在微信自带浏览器访问的代码
Jan 15 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
Sep 10 PHP
PHP判断数据库中的记录是否存在的方法
Nov 14 PHP
php递归函数三种实现方法及如何实现数字累加
Aug 07 PHP
Yii中实现处理前后台登录的新方法
Dec 28 PHP
Yii控制器中filter过滤器用法分析
Jul 15 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
Oct 12 PHP
php使用高斯算法实现图片的模糊处理功能示例
Nov 11 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
基于PHPExcel的常用方法总结
2013/06/13 PHP
yii用户注册表单验证实例
2015/12/26 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
2018/10/14 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
2019/07/26 PHP
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
jquery一键控制checkbox全选、反选或全不选
2017/10/16 jQuery
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
python插入数据到列表的方法
2015/04/30 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
python中使用print输出中文的方法
2018/07/16 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
python字典的值可以修改吗
2020/06/29 Python
在Tensorflow中实现leakyRelu操作详解(高效)
2020/06/30 Python
python SOCKET编程基础入门
2021/02/27 Python
澳大利亚手袋、珠宝和在线时尚精品店:The Way
2019/12/21 全球购物
有机婴儿毛毯和衣服:Monica + Andy
2020/03/01 全球购物
2014年端午节活动方案
2014/03/11 职场文书
品质主管岗位职责
2014/03/16 职场文书
请假条怎么写
2014/04/10 职场文书
公司委托书格式
2014/08/01 职场文书
施工安全协议书范本
2014/09/26 职场文书
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
2015年学校信息技术工作总结
2015/05/25 职场文书