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的资料请关注Devmax其它相关文章!

PHP 加密 Password Hashing API基础知识点的更多相关文章

  1. Swift(iOS)和PHP中AES256加密的结果不同

    我在AES256工作,能够使用不安全的渠道在iOS和PHP之间加密/解密.我已经看到很多类似的问题围绕密钥大小,模式(CBC或ECB),随机iv的使用等等.但在这种情况下,我发现了一个奇怪的行为,如下所示.两种环境中的配置:–密钥:32字节(256位)–块大小:128位(标准)–iv:16字节(静态用于测试目的)–模式:CBC如果我加密16或32字节的文本(以匹配AES块大小),Swift和PHP

  2. PHP 加密 Password Hashing API基础知识点

    在本篇文章里小编给大家分享的是一篇关于PHP 加密 Password Hashing API基础知识点,有兴趣的朋友们可以学习下。

  3. 在PHP文件中存储加密密钥的安全性

    所以我使用mcrypt加密数据,将其存储在数据库中并对其进行解密.我想知道在public_html目录之外的PHP文件中存储加密密钥是否安全?将其存储在文件中的原因是它需要用于多个加密,以便多个用户可以解密某些数据,并且我认为将其存储在文件中比在数据库表中更安全,就在加密旁边数据.什么是潜在的安全风险?是否有可能让黑客获得对此文件的访问权限,从而获得密钥?

  4. php – Codeigniter:如何在将表单提交给控制器之前加密密码?

    我有一个简单的html登录表单当我提交表格并在控制器中这里的问题,它显示了普通密码,如果我在控制器中键入123456,我得到123456.>这是安全问题吗?>任何人都可以通过wireshark等网络监控工具获取密码吗?在发送到控制器之前,我可以在视图中加密密码吗?

  5. php – 加密/解密与MySQL数据库之间的密码

    我开始为我的网站创建一个用户系统,我想要做的是加密密码,而不是明文.我正在使用PHP/MysqL,所以我认为crypt()是一个很好的起点.但是,我对这样的密码学并不陌生,而且我很难理解它是如何工作的.有人知道如何在最简单的层面上实现密码存储为加密字符串的方式,但总是能够解密,没有安全问题?

  6. php – Zend Mail Gmail SMTP

    嗨,我正在尝试从Zend_Mail模块通过gmail发送一些电子邮件.这是我的代码:错误:警告:stream_socket_enable_crypto()[streams.crypto]:此流不支持206行/library/Zend/Mail/Protocol/Smtp.PHP中的SSL/加密无法通过TLS连接我试着告诉我的托管服务提供商在phi.ini中启用openssl.dll但他们说这不是必

  7. 你能将php crypt()的输出转换为有效的MD5吗?

    我有一些使用PHPfunctioncrypt()加密的字符串.输出看起来像这样:虽然我相信crypt()正在使用MD5算法,但输出不是有效的MD5哈希值.有没有办法将生成的哈希值转换为有效的MD5哈希值?更新:感谢回复到目前为止的答案.我很确定使用的crypt函数是使用某种MD5算法.我要做的是将我拥有的输出转换为MD5哈希,如下所示:有没有办法从我有的哈希转换成上面的哈希?

  8. php – 最好的方法来保护数据库连接字符串?

    我正在PHP中编写一组数据库驱动的应用程序.这些应用程序将作为自己的用户在Linux服务器上运行.其他用户有时可能会在系统上,但访问权限非常受控.其他服务器,他们根本无法访问.我还将向需要编写使用DBI和我写的一组函数访问数据库的Perl脚本的开发人员公开一个限制存储过程API.我的问题是什么最好的方式来保护配置文件中有连接字符串?

  9. php – 在nodejs中加密

    更新:varcode=Crypto.createHmac.update.digest;你想要使用createHmac函数.

  10. 用PHP和MySQL解析我的哈希

    )以及PHP手册中的其他内容,但不知道如何存储和检索密码.所以,这是我所了解的全部:之后,我失去了盐.检索密码没有盐很容易,但盐混淆了我.我从哪里获得$salt的价值,特别是如果它是独一无二的和安全的?

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部