详谈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进行MySQL删除记录操作代码
Jun 07 PHP
PHP的简易冒泡法代码分享
Aug 28 PHP
将时间以距今多久的形式表示,PHP,js双版本
Sep 25 PHP
php自动加载机制的深入分析
Jun 08 PHP
php数组去重实例及分析
Nov 26 PHP
10个超级有用的PHP代码片段果断收藏
Sep 23 PHP
php+ajax实现无刷新的新闻留言系统
Dec 21 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
Jan 08 PHP
PHP使用curl制作简易百度搜索
Nov 03 PHP
PHP实现的敏感词过滤方法示例
Mar 06 PHP
PHP ElasticSearch做搜索实例讲解
Feb 05 PHP
php实现统计IP数及在线人数的示例代码
Jul 22 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中使用Oracle数据库(4)
2006/10/09 PHP
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
PHP中的switch语句的用法实例详解
2015/10/21 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
2019/10/17 PHP
jQuery bind事件使用详解
2011/05/05 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
JS组件Bootstrap实现弹出框效果代码
2016/04/26 Javascript
jQuery实现的右下角广告窗体跟随效果示例
2016/09/16 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
jQuery Ajax async=&gt;false异步改为同步时,解决导致浏览器假死的问题
2019/07/22 jQuery
javascript中undefined的本质解析
2019/07/31 Javascript
微信小程序 下拉刷新及上拉加载原理解析
2019/11/06 Javascript
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
JS制作简易计算器的实例代码
2020/07/04 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
[01:59][TI9趣味视频] 全明星赛奖励
2019/08/23 DOTA
python处理cookie详解
2014/02/07 Python
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
详解python做UI界面的方法
2019/02/27 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
数控专业个人求职信范例
2013/11/29 职场文书
学前教育毕业生自荐信范文
2013/12/24 职场文书
2014厂务公开实施方案
2014/02/17 职场文书
政府法律服务方案
2014/06/14 职场文书
2015年党员创先争优承诺书
2015/01/22 职场文书
党员自我评价2015
2015/03/03 职场文书
公司门卫岗位职责
2015/04/13 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python