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 将bmp图片转为jpg等其他任意格式的图片
Jun 29 PHP
php中$this-&amp;gt;含义分析
Nov 29 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
Jun 14 PHP
PHP使用Mysql事务实例解析
Sep 08 PHP
详解PHP错误日志的获取方法
Jul 20 PHP
常见的四种POST 提交数据方式(小总结)
Oct 08 PHP
PHP防止图片盗用(盗链)的方法小结
Nov 11 PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
Apr 03 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
Aug 09 PHP
PHP实现一维数组与二维数组去重功能示例
May 24 PHP
Laravel 模型关联基础教程详解
Sep 17 PHP
php使用json-schema模块实现json校验示例
Sep 28 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
杏林同学录(二)
2006/10/09 PHP
PHP isset()与empty()的使用区别详解
2010/08/29 PHP
如何用PHP做到页面注册审核
2017/03/02 PHP
range 标准化之获取
2011/08/28 Javascript
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
JavaScript如何实现跨域请求
2016/08/05 Javascript
AngularJS指令中的绑定策略实例分析
2016/12/14 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
JavaScript获取URL参数的方法之一
2017/03/24 Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
2018/01/13 Javascript
Vue Socket.io源码解读
2018/02/07 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
python实现调用其他python脚本的方法
2014/10/05 Python
Python+Wordpress制作小说站
2017/04/14 Python
5个很好的Python面试题问题答案及分析
2018/01/19 Python
理论讲解python多进程并发编程
2018/02/09 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
Python利用socket模块开发简单的端口扫描工具的实现
2021/01/27 Python
IE9下html5初试小刀
2010/09/21 HTML / CSS
巴西家用小家电购物网站:Polishop
2016/08/07 全球购物
美国标志性加大尺码时装品牌:Ashley Stewart
2016/12/15 全球购物
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
苹果Mac升级:MacSales.com
2017/11/20 全球购物
美国NBA官方商店:NBA Store
2019/04/12 全球购物
外语系毕业生自荐信范文
2013/12/16 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
工作后的感想
2015/08/07 职场文书
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis