详谈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 相关文章推荐
用Flash图形化数据(一)
Oct 09 PHP
php 动态添加记录
Mar 10 PHP
基于PHP遍历数组的方法汇总分析
Jun 08 PHP
php图像处理函数大全(推荐收藏)
Jul 11 PHP
php使用qr生成二维码的示例分享
Jan 20 PHP
yii框架builder、update、delete使用方法
Apr 30 PHP
新浪SAE搭建PHP项目教程
Jan 28 PHP
PHP时间和日期函数详解
May 08 PHP
php while循环控制的简单实例
May 30 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
Aug 16 PHP
Thinkphp5 自定义上传文件名的实现方法
Jul 23 PHP
PHP实用小技巧之调用录像的方法
Dec 05 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
【动漫杂谈】关于《请在T台上微笑》
2020/03/03 日漫
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
2014/04/08 PHP
PHP实现生成透明背景的PNG缩略图函数分享
2014/07/08 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
Jquery 插件开发笔记整理
2011/01/17 Javascript
javascript dom追加内容实现示例
2013/09/21 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
鼠标悬停小图标显示大图标
2016/01/22 Javascript
JS无缝滚动效果实现方法分析
2016/12/21 Javascript
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
2017/02/20 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
vue使用xe-utils函数库的具体方法
2018/03/06 Javascript
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
解决python "No module named pip" 的问题
2018/10/13 Python
Python-openCV读RGB通道图实例
2020/01/17 Python
西班牙创意礼品和小工具网上商店:Curiosite
2016/07/26 全球购物
英国家电直销:Appliances Direct
2016/09/22 全球购物
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
大学生创业计划书的格式要求
2013/12/29 职场文书
公益广告标语
2014/06/19 职场文书
个人批评与自我批评范文
2014/10/17 职场文书
工程部岗位职责范本
2015/04/11 职场文书
nginx内存池源码解析
2021/11/20 Servers