每次执行 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 是个不错的底线,但也许可以根据自己硬件的情况,加大这个值。

password_hash加密的更多相关文章

  1. PHP加密函数

    单向散列加密 单向散列加密是指通过对不同输入长度的信息进行散列计算,得到固定长度的输出.这个散列计算是单向的,即不能对固定长度的输出进行计算从而获取输入信息. 特征:雪崩效应.定长输出和不可逆 作用: ...

  2. ansible中定义变量的若干方法

    Ansible支持十几种定义变量的方式 根据优先级排序的定义方式: Inventory变量 Host Facts变量 Playbook变量 Playbook提示变量 变量文件 命令行变量 1.Inve ...

  3. PHP密码散列算法的学习

    不知道大家有没有看过 Laravel 的源码.在 Laravel 源码中,对于用户密码的加密,使用的是 password_hash() 这个函数.这个函数是属于 PHP 密码散列算法扩展中所包含的函数 ...

  4. PHP 使用 password_hash() 给密码加密

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

  5. PHP 用户密码加密函数password_hash

    传统的用户名和密码都采用加盐的方式存储加密信息,盐值也需要存储. 自PHP5.5.0之后,新增加了密码散列算法函数(password_hash),password_hash() 使用足够强度的单向散列 ...

  6. web加密的基本概念

    1.需求 了解web加密的一些基础概念. 2.基本概念 a.对称加密方式 对称加密方式 加密和解密用同一个密钥 不足之处是,交易双方都使用同样钥匙,安全性得不到保证.此外,每对用户每次使用对称加密算法 ...

  7. PHP 加密的几种方式

    在使用PHP开发Web应用的中,很多的应用都会要求用户注册,而注册的时候就需要我们对用户的信息进行处理了,最常见的莫过于就是邮箱和密码了,本文意在讨论对密码的处理:也就是对密码的加密处理. MD5 相 ...

  8. php提供的用户密码加密函数

    在实际项目中,对用户的密码加密基本上采用的  md5加盐的方式, php5.5后提供了一个加密函数,不需要手动加盐,不需要去维护盐值, $str = "123456"; $pwd ...

  9. PHP手册-函数参考-加密扩展

    一.Crack.CSPRNG.Hash.Mcrypt.Mhash.OpenSSL.密码散列算法的对比   Crack CSPRNG Hash Mcrypt Mhash OpenSSL 密码散列算法 简 ...

随机推荐

  1. 自动生产jason的工具

    EnjoySR/ESJsonFormat-Xcode

  2. windows下docker的安装并使用

    硬件虚拟化:硬件虚拟化是一种对计算机或操作系统的虚拟.虚拟化对用户隐藏了真实的计算机硬件,表现出另一个抽象计算平台. 打开任务管理器的性能查看是否支持虚拟化技术 下载windows docker ht ...

  3. 公司里面用的iTextSharp(教程)---生成一个简答的PDF的语法

    本来打算先写一个项目大家一起练习的,但是后来发现不懂一些基本的语法,几乎做了之后也有些不明白,下面我们一起简简单单的看一下哈~~ 语法1:Document document = new Documen ...

  4. caffe 中base_lr、weight_decay、lr_mult、decay_mult代表什么意思?

    在机器学习或者模式识别中,会出现overfitting,而当网络逐渐overfitting时网络权值逐渐变大,因此,为了避免出现overfitting,会给误差函数添加一个惩罚项,常用的惩罚项是所有权 ...

  5. 限制 input 输入框只能输入纯数字

    oninput = "value=value.replace(/[^\d]/g,'')"

  6. Centos 更改系统时间

    .date //查看本地 .hwclock --show //查看硬件的时间 .如果硬件的时间是对不上,那就对硬件的时间进行修改 .hwclock --set --date '2222-22-22 2 ...

  7. Mysql的基本语句

    Mysql的基本语句 1.查询当前数据库所有表名: -- 方案一: show tables; --方案二:jeesite为数据库 select table_name from information_ ...

  8. 关于sqlite使用场景

    对于sqlite,实际中从来没有用过,也几乎没有考虑过其使用场景,更不要说专门去研究它了,今天看最新的数据库流行度排行榜的时候,发现sqlite的长期趋势好像一直在第十位左右徘徊,特地搜索了下其使用场 ...

  9. C_Learning(3)

    / 结构体 / 声明结构体类型的一般形式: struct 结构体名[--表示的是这个结构体的类型] {    成员列表 }; [不要漏掉这个";"] / 声明结构可以放在main函 ...

  10. excel的C#操作教程

    C# Excel Tutorial http://csharp.net-informations.com/excel/csharp-excel-tutorial.htm How to transfer ...