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调用Oracle存储过程
Oct 09 PHP
PHP 高手之路(二)
Oct 09 PHP
header中Content-Disposition的作用与使用方法
Jun 13 PHP
解决PHP超大文件下载,断点续传下载的方法详解
Jun 06 PHP
如何用php生成扭曲及旋转的验证码图片
Jun 07 PHP
解析php 版获取重定向后的地址(代码)
Jun 26 PHP
php用正则表达式匹配中文实例详解
Nov 06 PHP
destoon出现验证码不显示时的紧急处理方法
Aug 22 PHP
PHP里的单例类写法实例
Jun 25 PHP
浅谈PHP中的
Apr 23 PHP
php发送http请求的常用方法分析
Nov 08 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 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 变量定义方法
2009/06/14 PHP
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
hessian 在PHP中的使用介绍
2010/12/13 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
jqgrid 简单学习笔记
2011/05/03 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
jQuery插件jRumble实现网页元素抖动
2015/06/05 Javascript
jQuery实现高亮显示网页关键词的方法
2015/08/07 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
Nodejs多站点切换Htpps协议详解及简单实例
2017/02/23 NodeJs
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
2017/03/10 Javascript
本地存储localStorage用法详解
2017/07/31 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
element-ui循环显示radio控件信息的方法
2018/08/24 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
vue+高德地图写地图选址组件的方法
2019/05/18 Javascript
vue.js实现左边导航切换右边内容
2019/10/21 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
python中sys.argv参数用法实例分析
2015/05/20 Python
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
python装饰器原理与用法深入详解
2019/12/19 Python
python从内存地址上加载python对象过程详解
2020/01/08 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
2020/12/03 Python
关于.NET, HTML的五个问题
2012/08/29 面试题
办公室文员工作自我评价
2013/12/01 职场文书
护理学应聘自荐书范文
2014/02/05 职场文书
作风建设演讲稿
2014/05/23 职场文书
二审代理词范文
2015/05/25 职场文书
高一语文教学反思
2016/02/16 职场文书
幼儿园六一儿童节开幕词
2016/03/04 职场文书
七年级作文之雪景
2019/11/18 职场文书
自定义函数实现单词排序并运用于PostgreSQL(实现代码)
2021/04/22 PostgreSQL