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 相关文章推荐
adodb与adodb_lite之比较
Dec 31 PHP
php桌面中心(二) 数据库写入
Mar 11 PHP
PHP通过header实现文本文件下载的代码
Aug 08 PHP
浅析php变量作用域的一些问题
Aug 08 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
Jan 07 PHP
ThinkPHP中U方法的使用浅析
Jun 13 PHP
php采用ajax数据提交post与post常见方法总结
Nov 10 PHP
php上传文件常见问题总结
Feb 03 PHP
php插入排序法实现数组排序实例
Feb 16 PHP
php简单实现sql防注入的方法
Apr 22 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
Jun 10 PHP
PDO::rollBack讲解
Jan 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
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
简单的PHP多图上传小程序代码
2011/07/17 PHP
php curl模拟post请求小实例
2013/11/13 PHP
Thinkphp批量更新数据的方法汇总
2016/06/29 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
为超链接加上disabled后的故事
2010/12/10 Javascript
用jQuery toggleClass 实现鼠标移上变色
2014/05/14 Javascript
JavaScript eval() 函数介绍及应用示例
2014/07/29 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
深入分析JSON编码格式提交表单数据
2015/06/25 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
基于javascript实现根据身份证号码识别性别和年龄
2016/01/22 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
angular学习之ngRoute路由机制
2017/04/12 Javascript
Angular中ng-options下拉数据默认值的设定方法
2017/06/21 Javascript
bootstrap中日历范围选择插件daterangepicker的使用详解
2018/04/17 Javascript
微信头像地址失效踩坑记附带解决方案
2019/09/23 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
2018/04/27 Python
15行Python代码实现网易云热门歌单实例教程
2019/03/10 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
python如何使用Redis构建分布式锁
2020/01/16 Python
如何通过命令行进入python
2020/07/06 Python
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
马来西亚与新加坡长途巴士售票网站:BusOnlineTicket.com
2018/11/05 全球购物
高中毕业的自我鉴定
2013/12/09 职场文书
酒店总经理助理岗位职责
2014/02/01 职场文书
幼儿园秋季开学寄语
2014/08/02 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
php+laravel 扫码二维码签到功能
2021/05/15 PHP
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python
关于python类SortedList详解
2021/09/04 Python
Pandas-DataFrame知识点汇总
2022/03/16 Python