详谈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 20 PHP
php foreach 参数强制类型转换的问题
Dec 10 PHP
PHP获取MySql新增记录ID值的3种方法
Jun 24 PHP
php实现字符串首字母大写和单词首字母大写的方法
Mar 14 PHP
php基本函数汇总
Jul 09 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
Sep 29 PHP
jquery+thinkphp实现跨域抓取数据的方法
Oct 15 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
PHP基于phpqrcode类生成二维码的方法详解
Mar 14 PHP
如何优雅的使用 laravel 的 validator验证方法
Nov 11 PHP
Yii2处理密码加密及验证的方法
May 12 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 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函数代码
2010/04/22 PHP
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
spl_autoload_register与autoload的区别详解
2013/06/03 PHP
汇总PHPmailer群发Gmail的常见问题
2016/02/24 PHP
zend framework中使用memcache的方法
2016/03/04 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
11个用于提高排版水平的基于jquery的文字效果插件
2012/09/14 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
js实现纯前端的图片预览
2016/04/27 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
Vue学习笔记进阶篇之单元素过度
2017/07/19 Javascript
vue 实现滚动到底部翻页效果(pc端)
2019/07/31 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
python使用itchat实现手机控制电脑
2018/02/22 Python
好的Python培训机构应该具备哪些条件
2018/05/23 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
python统计字符的个数代码实例
2020/02/07 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
电气自动化大学生求职信
2013/10/16 职场文书
幼儿园安全检查制度
2014/01/30 职场文书
执行总经理岗位职责
2014/02/03 职场文书
文员岗位职责范本
2015/04/16 职场文书
未中标通知书
2015/04/17 职场文书
信用卡工作证明范本
2015/06/19 职场文书
golang特有程序结构入门教程
2021/06/02 Python
带你了解CSS基础知识,样式
2021/07/21 HTML / CSS
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python