• 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



     

  • 相关阅读:
    Codeforces Round #192 (Div. 2)
    STL删除vector或list的方法及注意的问题
    HDU 4614 (13年多校第二场1004)裸线段树
    将汇编的指令画在图片上==可以贴图法操作==动动图片图案指示就行了。(堆积木编译器)
    MySQL Connector/Python 安装、测试
    crtmpserver的架构简介
    hi3531的i2c部分 分类: HI3531 2014-03-18 14:41 948人阅读 评论(0) 收藏
    bootrom的构成 分类: vxWorks 2014-03-14 08:48 315人阅读 评论(0) 收藏
    bootrom脚本的创建 分类: vxWorks 2014-03-14 08:47 307人阅读 评论(0) 收藏
    ROM型启动方式概述 分类: vxWorks 2014-03-14 08:47 297人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/LiChen-789/p/10157411.html
Copyright © 2020-2023  润新知