详谈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函数解决SQL injection
Dec 09 PHP
php下MYSQL limit的优化
Jan 10 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
Nov 03 PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
Apr 13 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
Jan 07 PHP
php中的登陆login实例代码
Jun 20 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
php批量删除操作(数据访问)
May 23 PHP
PHP实现按之字形顺序打印二叉树的方法
Jan 16 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
Jun 22 PHP
laravel执行php artisan migrate报错的解决方法
Oct 09 PHP
php7 图形用户界面GUI 开发示例
Feb 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
Cappuccino 卡布其诺咖啡之制作
2021/03/03 冲泡冲煮
php设置编码格式的方法
2013/03/05 PHP
php面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
PHP多进程编程实例详解
2017/07/19 PHP
javascript教程之不完整的继承(js原型链)
2014/01/13 Javascript
js动态拼接正则表达式的两种方法
2014/03/04 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
基于jQuery日历插件制作日历
2016/03/11 Javascript
JS 实现随机验证码功能
2017/02/15 Javascript
详解vue中async-await的使用误区
2018/12/05 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
2019/09/09 Javascript
Python群发邮件实例代码
2014/01/03 Python
Python中的字典与成员运算符初步探究
2015/10/13 Python
详解Python验证码识别
2016/01/25 Python
python删除某个字符
2018/03/19 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
Python实现中值滤波去噪方式
2019/12/18 Python
pycharm导入源码的具体步骤
2020/08/04 Python
Python filter过滤器原理及实例应用
2020/08/18 Python
加拿大高尔夫超市:Golf Town
2018/01/12 全球购物
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
金融专业推荐信
2013/11/14 职场文书
专营店会计助理岗位职责
2013/11/29 职场文书
现场施工员岗位职责
2014/03/10 职场文书
体育专业求职信
2014/07/16 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书
2016春季幼儿园大班开学寄语
2015/12/03 职场文书
如何利用React实现图片识别App
2022/02/18 Javascript
Spring Bean是如何初始化的详解
2022/03/22 Java/Android
正则表达式基础与常用验证表达式
2022/06/16 Javascript