PHP中哈希函数的恒定时间比较

时间:2016-04-28 14:59:45

标签: php hash

我正在尝试验证字符串是否与PHP中的SHA-512(Unix)哈希值($ 6 $ ..)匹配。很像Blowfish(BCrypt)的password_verify()函数,而是SHA-512(Unix)。

我偶然发现hash_equals,它倾向于使用相同的时间来比较两个字符串。但是,我无法在以下内容中获得预期的输出boolean true

<?php

$expected  = '$6$9e87b0c78da9ab83$5V16BLuWUkoG3g1oH3kwhs8rzBpjydUps1qBXuY3PkkFzDSjqklT47L5pmG8JPqDRDk.ZTJoS/ogtHkyXC2L40';

if (CRYPT_SHA512 == 1) {
    $correct = crypt('OkvraMADvua', '$6$12$usesomesillystringforsalt$');
}

var_dump(hash_equals($expected, $correct));

?>

现在,即使boolean false的哈希值对应于明文,并且为$expected变量生成的哈希值也匹配相同的明文(OkvraMADvua),我得到$correct。< / p>

  • 问题在于盐总是不同的,并且可以通过crypt(3)算法实现。每当我使用相同的盐时,很明显输出为boolean true

0 个答案:

没有答案