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设计模式 Proxy (代理模式)
Jun 26 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
PHP文件上传判断file是否己选择上传文件的方法
Nov 10 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
Oct 22 PHP
php中使用GD库做验证码
Mar 31 PHP
CI框架整合widget(页面格局)的方法
May 17 PHP
PHP中new static()与new self()的比较
Aug 19 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
Mar 31 PHP
php插入mysql数据返回id的方法
May 31 PHP
PHP实现的AES双向加密解密功能示例【128位】
Sep 03 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
Mar 18 PHP
laravel返回统一格式错误码问题
Nov 04 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下使用以下代码连接并测试
2008/04/09 PHP
PHP导入导出Excel代码
2015/07/07 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
jquery text,radio,checkbox,select操作实现代码
2009/07/09 Javascript
通过隐藏option实现select的联动效果
2009/11/10 Javascript
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
javascript几个易错点记录
2014/11/26 Javascript
javascript中Function类型详解
2015/04/28 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
vue+axios+mock.js环境搭建的方法步骤
2018/08/28 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
vue使用Sass时报错问题的解决方法
2020/10/14 Javascript
Python存取XML的常见方法实例分析
2017/03/21 Python
Python解决八皇后问题示例
2018/04/22 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
Python动态导入模块的方法实例分析
2018/06/28 Python
python将logging模块封装成单独模块并实现动态切换Level方式
2020/05/12 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
2020/10/20 Python
数控加工专业毕业生自荐信
2013/09/27 职场文书
自动化专业毕业生自荐信
2013/11/01 职场文书
《孔子游春》教学反思
2014/02/25 职场文书
大学军训感言300字
2014/03/09 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
终止劳动合同证明书样本
2014/11/19 职场文书
教师个人自我评价
2015/03/04 职场文书
公司员工培训管理制度
2015/08/04 职场文书
JavaScript中document.activeELement焦点元素介绍
2021/11/27 Javascript
工厂无线对讲系统解决方案
2022/02/18 无线电