详谈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 相关文章推荐
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
Mar 28 PHP
一步一步学习PHP(1) php开发环境配置
Feb 15 PHP
php判断终端是手机还是电脑访问网站的思路及代码
Apr 24 PHP
探讨fckeditor在Php中的配置详解
Jun 08 PHP
Yii Framework框架获取分类下面的所有子类方法
Jun 20 PHP
PHP中使用正则表达式提取中文实现笔记
Jan 20 PHP
PHP实现的简单缓存类
Jul 29 PHP
php搜索文件程序分享
Oct 30 PHP
cakephp常见知识点汇总
Feb 24 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
PHP实现转盘抽奖算法分享
Apr 15 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
Oct 10 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中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
PHP面向对象法则
2012/02/23 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
2013/06/06 PHP
php页面函数设置超时限制的方法
2014/12/01 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
Ajax请求PHP后台接口返回信息的实例代码
2018/08/21 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
你可能不再需要JQUERY
2021/03/09 Javascript
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
jquery maxlength使用说明
2011/09/09 Javascript
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
2015/10/10 Javascript
JavaScript常用数组算法小结
2016/02/13 Javascript
jQuery设置图片等比例缩小的方法
2017/04/29 jQuery
基于vue 动态加载图片src的解决方法
2018/02/05 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
vue-cli监听组件加载完成的方法
2018/09/07 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
tornado框架blog模块分析与使用
2013/11/21 Python
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
python使用正则表达式替换匹配成功的组
2017/11/17 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
python3.7将代码打包成exe程序并添加图标的方法
2019/10/11 Python
Selenium向iframe富文本框输入内容过程图解
2020/04/10 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
基于HTML5+Webkit实现树叶飘落动画
2017/12/28 HTML / CSS
测量工程专业求职信
2014/02/24 职场文书
民族团结好少年事迹材料
2014/08/19 职场文书
购房意向书
2014/08/30 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python
Spring实现内置监听器
2021/07/09 Java/Android
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python