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 相关文章推荐
Trying to clone an uncloneable object of class Imagic的解决方法
Jan 11 PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
Apr 26 PHP
使用淘宝IP库获取用户ip地理位置
Oct 27 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
PHP基本语法总结
Sep 06 PHP
基于PHP实现简单的随机抽奖小程序
Jan 05 PHP
php数据访问之查询关键字
May 09 PHP
PHP中的密码加密的解决方案总结
Oct 26 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
Jul 12 PHP
PhpStorm+xdebug+postman调试技巧分享
Sep 15 PHP
PHP生成随机密码4种方法及性能对比
Dec 11 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中利用XML技术构造远程服务(上)
2006/10/09 PHP
php与php MySQL 之间的关系
2009/07/17 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
解决jquery submit()提交表单提示:f[s] is not a function
2013/01/23 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
简单讲解jQuery中的子元素过滤选择器
2016/04/18 Javascript
javascript淘宝主图放大镜功能
2016/10/20 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
D3.js实现拓扑图的示例代码
2018/06/30 Javascript
JS中注入eval, Function等系统函数截获动态代码
2019/04/03 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
Python内置函数Type()函数一个有趣的用法
2015/02/18 Python
python实现逆波兰计算表达式实例详解
2015/05/06 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
Python+pandas计算数据相关系数的实例
2018/07/03 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
AmazeUI中模态框的实现
2020/08/19 HTML / CSS
我们是伦敦女孩:WalG
2018/01/08 全球购物
Lucene推荐的分页方式是什么?
2015/12/07 面试题
婚礼主持词开场白
2014/03/13 职场文书
员工安全生产责任书
2014/07/22 职场文书
2015年机关作风和效能建设工作总结
2015/07/23 职场文书
MySQL命令行操作时的编码问题详解
2021/04/14 MySQL
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis
Python中with上下文管理协议的作用及用法
2022/03/18 Python