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 相关文章推荐
mysq GBKl乱码
Nov 28 PHP
PHP中用header图片地址 简单隐藏图片源地址
Apr 09 PHP
php实现的仿阿里巴巴实现同类产品翻页
Dec 11 PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
超小PHP小马小结(方便查找后门的朋友)
May 05 PHP
PHP中strtr字符串替换用法详解
Nov 26 PHP
Yii框架关联查询with用法分析
Dec 02 PHP
php将图片保存入mysql数据库失败的解决方法
Dec 27 PHP
php实现的简易扫雷游戏实例
Jul 09 PHP
基于ThinkPHP实现批量删除
Dec 18 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 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制作的意见反馈表源码
2007/03/11 PHP
PHP insert语法详解
2008/06/07 PHP
php cookie 登录验证示例代码
2009/03/16 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
PHP实现的进度条效果详解
2016/05/03 PHP
php数值转换时间及时间转换数值用法示例
2017/05/18 PHP
Javascript操纵Cookie实现购物车程序
2006/11/23 Javascript
ie 调试javascript的工具
2009/04/29 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
使用Java实现简单的server/client回显功能的方法介绍
2013/05/03 Javascript
JQuery之focus函数使用介绍
2013/08/20 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
2017/03/31 Javascript
node+vue实现用户注册和头像上传的实例代码
2017/07/20 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
对mac下nodejs 更新到最新版本的最新方法(推荐)
2018/05/17 NodeJs
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
JS三级联动代码格式实例详解
2019/12/30 Javascript
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
[02:04]2018DOTA2亚洲邀请赛Secret赛前采访
2018/04/03 DOTA
Python实现多线程下载文件的代码实例
2014/06/01 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
windows下python安装小白入门教程
2018/09/18 Python
学生信息管理系统Python面向对象版
2019/01/30 Python
在TensorFlow中屏蔽warning的方式
2020/02/04 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
服装公司总经理岗位职责
2013/11/30 职场文书
心得体会开头
2014/01/01 职场文书
党员干部三严三实心得体会
2014/10/13 职场文书
学雷锋团日活动总结
2015/05/06 职场文书
党员转正党支部意见
2015/06/02 职场文书
建房合同协议书
2016/03/21 职场文书