zoukankan      html  css  js  c++  java
  • PHP 使用 password_hash() 给密码加密

    PHP >= 5.5 时,可以使用 password_hash() 和 password_verify() 来对用户的密码进行加密和验证,例如在用户注册(加密存储)和登陆(验证):

    <?php
    
    $password = '12345';
    $options = [
        'cost' => 11, // 默认是10,用来指明算法递归的层数
    		// mcrypt_create_iv — 从随机源创建初始向量
    		// @param 初始向量大小
    		// @param 初始向量数据来源
    		// 可选值有: MCRYPT_RAND (系统随机数生成器), MCRYPT_DEV_RANDOM (从 /dev/random 文件读取数据) 和 MCRYPT_DEV_URANDOM (从 /dev/urandom 文件读取数据)。 在 Windows 平台,PHP 5.3.0 之前的版本中,仅支持 MCRYPT_RAND。请注意,在 PHP 5.6.0 之前的版本中, 此参数的默认值为 MCRYPT_DEV_RANDOM。
    		// 生成一个长度为22的随机向量
        'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM), 
    ];
    
    // @param 用户的密码
    // @param 一个用来在散列密码时指示算法的密码算法常量
    // PASSWORD_DEFAULT 使用 bcrypt 算法 (PHP 5.5.0 默认),该常量会随着 PHP 加入更新更高强度的算法而改变。 所以,使用此常量生成结果的长度将在未来有变化。 因此,数据库里储存结果的列可超过60个字符(最好是255个字符)
    // PASSWORD_BCRYPT 使用 CRYPT_BLOWFISH 算法创建哈希。 这会产生兼容使用 "$2y$" 的 crypt()。 结果将会是 60 个字符的字符串, 或者在失败时返回 FALSE
    // @param 一个包含有选项的关联数组。目前支持两个选项:salt,在散列密码时加的盐(干扰字符串),以及cost,用来指明算法递归的层数。省略后,将使用随机盐值与默认 cost。
    $crypt = password_hash($password, PASSWORD_DEFAULT, $options);
    // 或 $crypt = password_hash($password, PASSWORD_DEFAULT);
    var_dump($crypt); // 长度60
    
    var_dump(md5($password)); // 长度32
    
    // 检查密码与散列值是否匹配
    if(password_verify($password, $crypt)) {
    	echo 'same';
    }
    

    说明:password_hash() 详情见手册:http://php.net/manual/zh/function.password-hash.php,它是 crypt() (见手册:http://php.net/manual/zh/function.crypt.php)的一个简单封装。  

    参考:

    <PHP Cookbook>3'rd

  • 相关阅读:
    Win10 Theano Install Guide
    mysql 查看版本和是否支持分区
    [mysql]Date和String相互转换(DATE_FORMAT&STR_TO_DATE)
    mysql运用now(3)存储时间到毫秒
    mysql按天,按周,按月,按季度,按年统计数据
    对象的copy
    定时调度任务quartz
    mysql使用navicat编写调用存储过程
    mysql批量插入,批量更新
    Mybatis分页插件pagehelper的使用
  • 原文地址:https://www.cnblogs.com/dee0912/p/5472908.html
Copyright © 2011-2022 走看看