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 相关文章推荐
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
Mar 28 PHP
PHP分多步骤填写发布信息的简单方法实例代码
Sep 23 PHP
深入apache host的配置详解
Jun 09 PHP
解析php中获取url与物理路径的总结
Jun 21 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
Aug 09 PHP
PHP SplObjectStorage使用实例
May 12 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
Nov 23 PHP
PHP中new static()与new self()的比较
Aug 19 PHP
iOS10推送通知开发教程
Sep 19 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
Jan 16 PHP
用PHP的反射实现委托模式的讲解
Mar 22 PHP
ThinkPHP框架实现FTP图片上传功能示例
Apr 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使用$_POST或$_SESSION[]向js函数传参
2014/09/16 PHP
PHP7.0版本备注
2015/07/23 PHP
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
php结合ajax实现手机发红包的案例
2016/10/13 PHP
thinkPHP模板中函数的使用方法示例
2016/11/30 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
Bootstrap源码解读媒体对象、列表组和面板(10)
2016/12/26 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
Angular学习笔记之集成三方UI框架、控件的示例
2018/03/23 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
jQuery实现的上拉刷新功能组件示例
2020/05/01 jQuery
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
超详细小程序定位地图模块全系列开发教学
2020/11/24 Javascript
wxPython框架类和面板类的使用实例
2014/09/28 Python
Python实例一个类背后发生了什么
2016/02/09 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
python实现发送带附件的邮件代码分享
2020/09/22 Python
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
英国在线药房和在线医生:LloydsPharmacy
2019/10/21 全球购物
越南母婴用品购物网站:Kids Plaza
2020/04/09 全球购物
药学专业个人自我评价
2013/11/11 职场文书
教师求职推荐信范文
2013/11/20 职场文书
入党申请人的自我鉴定
2013/12/01 职场文书
《广玉兰》教学反思
2014/04/14 职场文书
财务负责人任命书
2014/06/06 职场文书
思想道德自我评价2015
2015/03/09 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
大学生活委员竞选稿
2015/11/21 职场文书
浅谈哪个Python库才最适合做数据可视化
2021/06/28 Python
java实现面板之间切换功能
2022/06/10 Java/Android