详谈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 Squid中可缓存的动态网页设计
Sep 17 PHP
ie6 动态缩略图不显示的原因
Jun 21 PHP
php后台程序与Javascript的两种交互方式
Oct 25 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
Jun 04 PHP
php下使用strpos需要注意 === 运算符
Jul 17 PHP
PHP mail()函数使用及配置方法
Jan 14 PHP
php 不使用js实现页面跳转
Feb 11 PHP
easyui的tabs update正确用法分享
Mar 21 PHP
php中get_cfg_var()和ini_get()的用法及区别
Mar 04 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
May 16 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
Aug 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
咖啡的种类和口感
2021/03/03 新手入门
PHP中的命名空间详细介绍
2015/07/02 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
PHP 出现 http500 错误的解决方法
2021/03/09 PHP
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
javascript打印html内容功能的方法示例
2013/11/28 Javascript
Javascript小技巧之生成html元素
2014/05/15 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
利用js+css+html实现固定table的列头不动
2016/12/08 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
python urllib urlopen()对象方法/代理的补充说明
2017/06/29 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
在pycharm上mongodb配置及可视化设置方法
2018/11/30 Python
python selenium执行所有测试用例并生成报告的方法
2019/02/13 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
Python bisect模块原理及常见实例
2020/06/17 Python
基于Python下载网络图片方法汇总代码实例
2020/06/24 Python
python的scipy.stats模块中正态分布常用函数总结
2021/02/19 Python
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
11月红领巾广播稿
2014/01/17 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
学校个人对照检查材料
2014/08/26 职场文书
2015年少先队活动总结
2015/03/25 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
拯救大兵瑞恩观后感
2015/06/09 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
2016年教育局“我们的节日——端午节”主题活动总结
2016/04/01 职场文书
理解深度学习之深度学习简介
2021/04/14 Python
python实现简单倒计时功能
2021/04/21 Python