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 相关文章推荐
使用MaxMind 根据IP地址对访问者定位
Oct 09 PHP
PHP中的CMS的涵义
Mar 11 PHP
通过PHP CLI实现简单的数据库实时监控调度
Jul 01 PHP
PHPCMS的使用小结
Sep 20 PHP
PHP程序漏洞产生的原因分析与防范方法说明
Mar 06 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
May 15 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
Jun 25 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
Oct 21 PHP
PHP中使用socket方式GET、POST数据实例
Apr 02 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
Sep 30 PHP
php基于PDO连接MSSQL示例DEMO
Jul 13 PHP
Laravel如何实现适合Api的异常处理响应格式
Jun 14 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/05/27 PHP
让PHP开发者事半功倍的十大技巧小结
2010/04/20 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
PHP+memcache实现消息队列案例分享
2014/05/21 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
jQuery设置Cookie及删除Cookie实例分析
2016/04/15 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
jQuery延迟执行的实现方法
2016/12/21 Javascript
jq给页面添加覆盖层遮罩的实例
2017/02/16 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
简单实现vue验证码60秒倒计时功能
2017/10/11 Javascript
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
VueCli4项目配置反向代理proxy的方法步骤
2020/05/17 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[35:29]Secret vs VG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
Python使用requests发送POST请求实例代码
2018/01/25 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
Python面向对象之接口、抽象类与多态详解
2018/08/27 Python
Python使用ctypes调用C/C++的方法
2019/01/29 Python
加拿大高尔夫超市:Golf Town
2018/01/12 全球购物
彪马西班牙官网:PUMA西班牙
2019/06/18 全球购物
师生聚会感言
2014/01/26 职场文书
面试自我介绍演讲稿
2014/04/29 职场文书
高中教师考核方案
2014/05/18 职场文书
图书室标语
2014/06/21 职场文书
中秋节活动总结
2014/08/29 职场文书
体育教师个人工作总结
2015/02/09 职场文书
Python3接口性能测试实例代码
2021/06/20 Python
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技