PHP 加密 Password Hashing API基础知识点


Posted in PHP onMarch 02, 2020

PHP 5.5 之后引入 Password hashing API 用于创建和校验哈希密码,它属于内核自带,无需进行任何扩展安装和配置。它主要提供了四个函数以供使用:

● password_hash():创建密码的哈希;

● password_verify():验证密码是否和哈希匹配;

● password_needs_rehash():检查给定的哈希是否匹配给定的选项;

● password_get_info():返回指定哈希的相关信息。

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

使用足够强度的单向散列算法生成密码的哈希。此函数兼容 crypt(),即由 crypt() 生成的哈希值可以使用 Password hashing API 的相关函数进行校验。

● password:用户密码。

● algo:密码算法常量。取值包括:

● PASSWORD_DEFAULT:使用 bcrypt 算法。最终生成的结果可能超过 60 个字符;

● PASSWORD_BCRYPT:使用 CRYPT_BLOWFISH 算法创建哈希。最终结果是 60 个字符的字符串,或在失败时返回 FALSE。

● salt:手动提供哈希密码的盐值。省略此项时,函数会为每个密码哈希自动生成随机的盐值。PHP 7.0 已废弃该项;

● cost:代表算法使用的 cost。默认值是 10,可根据实际情况增加。

2、password_verify(string password, string hash)

● password:用户提供的密码。

● hash:由 password_hash() 创建的哈希散列值。 如果匹配则返回 TRUE,否则返回 FALSE。时序攻击对此函数不起作用。

3、password_needs_rehash(string hash, integer algo [, array opitons])

● hash:由 password_hash() 生成的哈希;

● algo:密码算法常量;

● options:包含有关选项的关联数组。

4、password_get_info(string hash) hash:由 password_hash() 生成的哈希。 返回一个包含三个元素的关联数组:

● algo:密码算法常量;

● algoName:算法名称;

● options:调用 password_hash() 时提供的选项。

示例

$str = 'chicken,run!';
$pwd1 = password_hash($str, PASSWORD_BCRYPT);
$pwd2 = crypt($str);

var_dump(password_verify('chicken,run!', $pwd1));  // 输出 true
var_dump(password_verify('chicken,ran!', $pwd1));  // 输出 false
var_dump(password_verify($str, $pwd2));  // 输出 true
var_dump(password_needs_rehash($pwd1, PASSWORD_BCRYPT, ['cost'=>10]));  // 输出 false,因为 password_hash() 在加密时,出来默认 cost 为 10 外,还会指定随机的盐值

知识点补充:

PHP加密解密函数分享

<?php
/**
*功能:对字符串进行加密处理
*参数一:需要加密的内容
*参数二:密钥
*/
function passport_encrypt($str,$key){ //加密函数
srand((double)microtime() * 1000000);
$encrypt_key=md5(rand(0, 32000));
$ctr=0;
$tmp='';
for($i=0;$i<strlen($str);$i++){
$ctr=$ctr==strlen($encrypt_key)?0:$ctr;
$tmp.=$encrypt_key[$ctr].($str[$i] ^ $encrypt_key[$ctr++]);
}
return base64_encode(passport_key($tmp,$key));
}
/**
*功能:对字符串进行解密处理
*参数一:需要解密的密文
*参数二:密钥
*/
function passport_decrypt($str,$key){ //解密函数
$str=passport_key(base64_decode($str),$key);
$tmp='';
for($i=0;$i<strlen($str);$i++){
$md5=$str[$i];
$tmp.=$str[++$i] ^ $md5;
}
return $tmp;
}

/**
*辅助函数
*/
function passport_key($str,$encrypt_key){
$encrypt_key=md5($encrypt_key);
$ctr=0;
$tmp='';
for($i=0;$i<strlen($str);$i++){
$ctr=$ctr==strlen($encrypt_key)?0:$ctr;
$tmp.=$str[$i] ^ $encrypt_key[$ctr++];
}
return $tmp;
}
$str='作者:WWW.JB51.NET;
$key='jb51net';
$encrypt=passport_encrypt($str,$key);
$decrypt=passport_decrypt($encrypt,$key);

echo '原文:',$str."<br><hr>";
echo '密文:',$encrypt."<br><hr>";
echo '译文:',$decrypt."<br><hr>";
?>

以上就是PHP 加密 Password Hashing API基础知识点的详细内容,更多关于PHP 加密:Password Hashing API的资料请关注三水点靠木其它相关文章!

PHP 相关文章推荐
FirePHP 推荐一款PHP调试工具
Apr 23 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
Jul 29 PHP
色色整理的PHP面试题集锦
Mar 08 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
一个简单且很好用的php分页类
Oct 26 PHP
php设计模式之单例模式使用示例
Jan 20 PHP
thinkphp中html:list标签传递多个参数实例
Oct 30 PHP
帝国cms常用标签汇总
Jul 06 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
Mar 22 PHP
PHP文件与目录操作示例
Dec 24 PHP
PHP实现带进度条的Ajax文件上传功能示例
Jul 02 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
Nov 22 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
Mar 02 #PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
Mar 02 #PHP
让whoops帮我们告别ThinkPHP6的异常页面
Mar 02 #PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 #PHP
PHP中关于php.ini参数优化详解
Feb 28 #PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 #PHP
php 的多进程操作实践案例分析
Feb 28 #PHP
You might like
mysql+php分页类(已测)
2008/03/31 PHP
PHP常用技巧总结(附函数代码)
2012/02/04 PHP
如何使用PHP计算上一个月的今天
2013/05/23 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
SwfUpload在IE10上不出现上传按钮的解决方法
2013/06/25 Javascript
jQuery 全选/反选以及单击行改变背景色实例
2013/07/02 Javascript
JS+CSS实现一个气泡提示框
2013/08/18 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
jQuery实现弹出窗口弹出div层的实例代码
2017/01/09 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
2017/09/21 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
React中阻止事件冒泡的问题详析
2019/04/12 Javascript
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
Python实现Smtplib发送带有各种附件的邮件实例
2017/06/05 Python
python模拟事件触发机制详解
2018/01/19 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
python3实现高效的端口扫描
2019/08/31 Python
Python面向对象之Web静态服务器
2019/09/03 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
增大python字体的方法步骤
2020/07/05 Python
应聘医药代表职位求职信
2013/10/21 职场文书
市场营销求职信范文
2014/02/21 职场文书
房地产推广策划方案
2014/05/19 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书