zoukankan      html  css  js  c++  java
  • password_hash加密

    每次执行 password_hash('123456', PASSWORD_BCRYPT) 语句后,得到哈希值都不一样!
    给密码做哈希之前,会先加入一个随机子串,因为加入的随机子串每次是不一样的,所以得到的哈希值自然就不一样了。这就让在不同的服务中使用同一个密码的用户,他的密码的安全性变高了。这个随机子串就叫「盐值」,加入盐值的过程就是「加盐处理」。

    <?php
    $passwordHash = password_hash('123456', PASSWORD_BCRYPT);
    echo $passwordHash.PHP_EOL;
    
    $flag = password_verify('123456',$passwordHash);
    echo $flag.PHP_EOL;
    
    <?php
    function custom_function_for_salt() {
        return md5(mt_rand(1111,9999));
    }
    
    $options = [
        'salt' => custom_function_for_salt(), //自定义函数来获得盐值
        'cost' => 12 // the default cost is 10
    ];
    $passwordHash = password_hash('123456', PASSWORD_BCRYPT,$options);
    echo $passwordHash.PHP_EOL;
    
    $flag = password_verify('123456',$passwordHash);
    echo $flag.PHP_EOL;
    

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

  • 相关阅读:
    关于线程池的线程复用
    Java线程锁之意难平的读写锁
    Java8之StringJoiner
    springboot整合thymeleaf
    一维数组转二叉树、注解回滚、eclipse配置代码自动补全
    Java之线程锁
    关于工作中的一些总结
    关于shiro的猜测
    Java之扫描不到mapper
    网页中引用css样式
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/10459786.html
Copyright © 2011-2022 走看看