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

  • 相关阅读:
    算法---十大经典排序算法
    算法---待整理
    iOS面试题整理---[难度]***
    spring mvc(注解)上传文件的简单例子
    面试感悟:3年工作经验程序员应有的技能
    一个 IT 青年北漂四年的感悟
    成为更优秀程序员的关键:更多的阅读
    数组参数 有params 区别
    对C# 集合类的总结
    c#前缀
  • 原文地址:https://www.cnblogs.com/dee0912/p/5472908.html
Copyright © 2011-2022 走看看