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 相关文章推荐
PHP经典的给图片加水印程序
Dec 06 PHP
如何突破PHP程序员的技术瓶颈分析
Jul 17 PHP
php的数组与字符串的转换函数整理汇总
Jul 18 PHP
php设置允许大文件上传示例代码
Mar 10 PHP
php中smarty模板条件判断用法实例
Jun 11 PHP
php实现购物车功能(上)
Jul 23 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
Oct 08 PHP
Laravel中log无法写入问题的解决
Jun 17 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
May 12 PHP
PHP常用日期加减计算方法实例小结
Jul 31 PHP
详解php用static方法的原因
Sep 12 PHP
详解no input file specified 三种解决方法
Nov 29 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
基于php设计模式中单例模式的应用分析
2013/05/15 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
2013/06/20 PHP
PHP过滤黑名单关键字的方法
2014/12/01 PHP
php数组函数array_key_exists()小结
2015/12/10 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
JS提交并解析后台返回的XML的代码
2008/11/03 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
jqPlot 基于jquery的画图插件
2011/04/26 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
2013/11/22 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
js插件dropload上拉下滑加载数据实例解析
2016/07/27 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
Vue 使用中的小技巧
2018/04/26 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
vue动态子组件的两种实现方式
2019/09/01 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
python中使用序列的方法
2015/08/03 Python
Dlib+OpenCV深度学习人脸识别的方法示例
2019/05/14 Python
pycharm new project变成灰色的解决方法
2019/06/27 Python
Django 源码WSGI剖析过程详解
2019/08/05 Python
python内打印变量之%和f的实例
2020/02/19 Python
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
自主招生自荐信范文
2013/12/04 职场文书
装修施工安全责任书
2014/07/24 职场文书
2014年公务员工作总结
2014/11/18 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
小学五年级(说明文3篇)
2019/08/13 职场文书
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技