password_verify表示每个人都匹配

时间:2016-04-04 23:09:18

标签: php

我正在尝试创建一个简单的哈希,用作PHP中的键值值。根据PHP最佳实践,我应该使用password_hash然后使用password_verify来确认它们是否匹配。

然而,我发现有多个值(在示例中有56个匹配)。

<?php 
echo '<pre>';

$apiKey = hash('sha512', uniqid());
$apiToken = hash('sha512', uniqid());
$apiTokenHash = password_hash($apiToken, PASSWORD_DEFAULT);

echo '$apiKey = ' . $apiKey . ' length = ' . strlen($apiKey) . '<br/>';
echo '$apiToken = ' . $apiToken . ' length = ' . strlen($apiToken) . '<br/>';
echo '$apiTokenHash = ' . $apiTokenHash . ' length = ' . strlen($apiTokenHash)  . '<br/>';

$verify = password_verify($apiToken, $apiTokenHash);
$style = ($verify) ? "color: green;" : '';
echo "<p style='{$style}'>({$apiToken} === {$apiTokenHash})</p>";


$count = 1;
while(strlen($apiToken) > 0) {
    $apiToken = substr($apiToken, 0, -1);
    $verify = password_verify($apiToken, $apiTokenHash);
    $style = ($verify) ? "color: green;" : '';
    echo "<p style='{$style}'>{$count} - ({$apiToken} === {$apiTokenHash})</p>";
    $count++;
}
?>

有谁理解为什么password_verify接受了这么多答案。

P.S。我真的很想在你的PHP小提琴中找到它,但我无法弄清楚如何分享它的链接所以请不要给我一点困难。

1 个答案:

答案 0 :(得分:4)

password_hash()使用的bcrypt算法不能散列超过72个字符的字符串。在进行哈希处理之前,较长的字符串会被截断。