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 相关文章推荐
Ha0k 0.3 PHP 网页木马修改版
Oct 11 PHP
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
Apr 02 PHP
php基于session实现数据库交互的类实例
Aug 03 PHP
PHP版本常用的排序算法汇总
Dec 20 PHP
PHP代码维护,重构变困难的4种原因分析
Jan 25 PHP
php设计模式之委托模式
Feb 13 PHP
PHP+Apache+Mysql环境搭建教程
Aug 01 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
Nov 17 PHP
用php+ajax新建流程(请假、进货、出货等)
Jun 11 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
May 16 PHP
PHP实现的CURL非阻塞调用类
Jul 26 PHP
php实现映射操作实例详解
Oct 02 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 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
php echo()和print()、require()和include()函数区别说明
2010/03/27 PHP
创建配置文件 用PHP写出自己的BLOG系统 2
2010/04/12 PHP
第五章 php数组操作
2011/12/30 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
PHP的引用详解
2015/02/22 PHP
php实现购物车功能(上)
2020/07/23 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
项目实践之javascript技巧
2007/12/06 Javascript
js 判断 enter 事件
2009/02/12 Javascript
jquery模拟按下回车实现代码
2011/09/20 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
2016/10/24 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
2017/05/10 Javascript
Bootstrap模态框插入视频的实现代码
2017/06/25 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
mock.js实现模拟生成假数据功能示例
2019/01/15 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
2020/11/02 Javascript
[53:15]Mineski vs iG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
详解Python使用tensorflow入门指南
2018/02/09 Python
小白入门篇使用Python搭建点击率预估模型
2018/10/12 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
全球性的在线购物网站:Zapals
2017/03/22 全球购物
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
法国在线药房:DoctiPharma
2020/10/21 全球购物
经典团队口号
2014/06/06 职场文书
团员自我评价范文
2015/03/10 职场文书
MySQL如何使备份得数据保持一致
2022/05/02 MySQL