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 相关文章推荐
一个程序下载的管理程序(二)
Oct 09 PHP
php利用header函数实现文件下载时直接提示保存
Nov 12 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
Aug 01 PHP
php cookie使用方法学习笔记分享
Nov 07 PHP
phpstrom使用xdebug配置方法
Dec 17 PHP
CI(CodeIgniter)框架配置
Jun 10 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
destoon出现验证码不显示时的紧急处理方法
Aug 22 PHP
避免Smarty与CSS语法冲突的方法
Mar 02 PHP
php自动更新版权信息显示的方法
Jun 19 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
Laravel框架实现超简单的分页效果示例
Feb 08 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新手上路(十)
2006/10/09 PHP
解析php函数method_exists()与is_callable()的区别
2013/06/21 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
jQuery代码优化 遍历篇
2011/11/01 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
2013/08/21 Javascript
js 操作符汇总
2014/11/08 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
2018/03/21 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
2018/07/11 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
python基础教程之类class定义使用方法
2014/02/20 Python
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
详解python上传文件和字符到PHP服务器
2017/11/24 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
2017/12/03 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
澳大利亚牛仔裤商店:Just Jeans
2016/10/13 全球购物
幼师自我鉴定范文
2013/10/01 职场文书
办理护照介绍信
2014/01/16 职场文书
护士检查书
2014/01/17 职场文书
《鸟岛》教学反思
2014/04/26 职场文书
医师定期考核实施方案
2014/05/07 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
2015年化验室工作总结
2015/04/23 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
2016大学迎新欢迎词
2015/09/29 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书
庭外和解协议书
2016/03/23 职场文书