zoukankan      html  css  js  c++  java
  • PHP 非对称加密函数password_hash() 替代Md5()

    $hashed_password = password_hash('mypassword',PASSWORD_BCRYPT);
    var_dump(password_verify ('mypassword', $hashed_password.''));
    #结果true

    我们一般习惯性的使用MD5方法进行用户密码的加密处理,但是常见的Md5方法非常容易被一些大型解密网站破解;
    PHP提供了 'password_hash()' 函数可以生产更加安全的密码;
    password_hash一共支持三个参数的传入

    password_hash ( string $password , int $algo [, array $options ] )
    

     1:用户的明文密码;

    2:加密算法 (PASSWORD_DEFAULT PASSWORD_BCRYPT PASSWORD_ARGON2I);


            PASSWORD_BCRYPT 支持的选项:

     1. salt(string) - 手动提供散列密码的盐值(salt)。这将避免自动生成盐值(salt)。
          省略此值后,password_hash() 会为每个密码散列自动生成随机的盐值。这种操作是有意的模式。
          盐值(salt)选项从 PHP 7.0.0 开始被废弃(deprecated)了。 现在最好选择简单的使用默认产生的盐值。
    2. cost (integer) - 代表算法使用的 cost。 省略时,默认值是 10。 这个 cost 是个不错的底线,但也许可以根据自己硬件的情况,加大这个值

            PASSWORD_ARGON2I 支持的选项:

        memory_cost (integer) - 计算 Argon2 散列时的最大内存(单位:字节 byte)。默认值: PASSWORD_ARGON2_DEFAULT_MEMORY_COST。
        time_cost (integer) - 计算 Argon2 散列时最多的时间。默认值: PASSWORD_ARGON2_DEFAULT_TIME_COST。
        threads (integer) - 计算 Argon2 散列时最多的线程数。默认值: PASSWORD_ARGON2_DEFAULT_THREADS。
    

    3.一个包含有选项的关联数组 目前支持两个选项:salt (盐值) cost(用来指明算法递归的层数);

    返回值:
    返回散列后的密码,失败的时候返回False;
    其中返回的密码中包含了使用的(算法 cost 盐值) 所以我们可以不用存储盐值和算法的信息;
    使用password_verify()可以直接进行验证;

    使用案例:

    $options = [
      'cost' => 11,
        'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
     ];
    password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);
    输出:$2y$11$q5MkhSBtlsJcNEVsYh64a.aCluzHnGog7TQAKVmQwO9C8xb.t89F.

    验证散列是否和密码匹配 password_verify()
    bool password_verify ( string $password , string $hash )
    参数1:传入用户密码 参数2:传入用户的哈希值

    案例:

    $hashed_password = password_hash('mypassword',PASSWORD_BCRYPT);
    var_dump(password_verify ('mypassword', $hashed_password.''));
    

    PHP官网解释:http://php.net/manual/zh/faq.passwords.php

          http://php.net/manual/zh/function.password-hash.php



     

  • 相关阅读:
    JS正则表达式验证账号、手机号、电话和邮箱
    Asp.Net Mvc导出Excel
    后台截取姓名,只留姓名字带*号覆盖
    后台根据身份证号码截取性别和出生日期
    后台传个变量,前台页面显示对应的中文
    第一次封装JS文件之滚动条
    阿里巴巴17校招测试题目(Jquery解法)
    阿里巴巴17实习生招聘编程题目(JavaScript解法)
    SofewareTesting hw3
    PHP之login
  • 原文地址:https://www.cnblogs.com/LiChen-789/p/10157411.html
Copyright © 2011-2022 走看看