首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

hash_equals

(PHP 5 >= 5.6.0, PHP 7)

hash_equals — 定时攻击安全字符串比较

描述

代码语言:javascript
复制
bool hash_equals ( string $known_string , string $user_string )

使用相同的时间比较两个字符串,不管它们是否相等。

这个功能应该用来缓解定时攻击;;例如,在测试crypt()密码哈希值时。

参数

known_string

已知长度的字符串进行比较

user_string

用户提供的字符串

返回值

两个字符串相等时返回TRUE,否则返回FALSE

错误/异常

当提供的参数不是字符串时,发出E_WARNING消息。

例子

示例#1 hash_equals()示例

代码语言:javascript
复制
<?php
$expected??=?crypt('12345',?'$2a$07$usesomesillystringforsalt$');
$correct???=?crypt('12345',?'$2a$07$usesomesillystringforsalt$');
$incorrect?=?crypt('apple',??'$2a$07$usesomesillystringforsalt$');

var_dump(hash_equals($expected,?$correct));
var_dump(hash_equals($expected,?$incorrect));
?>

上面的例子将输出:

代码语言:javascript
复制
bool(true)
bool(false)

笔记

注意

两个参数的长度必须相同才能成功比较。当提供不同长度的参数时,立即返回FALSE,并且在定时攻击的情况下已知字符串的长度可能被泄漏。

注意

提供用户提供的字符串作为第二个参数非常重要,而不是第一个参数。

← hash_copy

hash_file →

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com