password_get_info:未返回预期结果

时间:2016-01-11 09:06:00

标签: php passwords

我只是在尝试密码功能。

<?php
$output=crypt("shivaf", "$6$rounds=50000$ldfjgfdjglkdfjgkljfdlgj$");
print_r(password_get_info($output));

$output=password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."\n";
print_r(password_get_info($output));

这必须输出我使用的散列函数的细节,但我得到了不同的输出

输出

Array ( [algo] => 0 [algoName] => unknown [options] => Array ( ) ) Array ( [algo] => 0 [algoName] => unknown [options] => Array ( ) ) 

我只是在学习不知道自己做错了什么。

提前致谢

2 个答案:

答案 0 :(得分:2)

password_get_info适用于password_hash生成的密码。

在第一个示例中,您无法为crypt执行任何操作。

在第二个示例中,您将"\n"添加到哈希,这使其无效。这有效:

$output=password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
print_r(password_get_info($output));

作为旁注,您可能希望对crypt示例使用单引号。

答案 1 :(得分:1)

您的问题与此字符串"$6$rounds=50000$ldfjgfdjglkdfjgkljfdlgj$"

周围使用双引号有关

当你使用双引号时,PHP试图扩展$rounds=,因为它是一个变量。

所以只需使用单引号即可。事实上除非你知道你想扩展$variable,否则你应该总是使用单引号来避免这种事故。

<?php
$output=crypt("shivaf", '$6$rounds=50000$ldfjgfdjglkdfjgkljfdlgj$');
print_r(password_get_info($output));

$output=password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
print_r(password_get_info($output));

哪会生成

 Array
(
    [algo] => 0
    [algoName] => unknown
    [options] => Array
        (
        )

)
Array
(
    [algo] => 1
    [algoName] => bcrypt
    [options] => Array
        (
            [cost] => 10
        )

)

但当然这只是为了证明亚历克斯所说的几乎是真的,那就是

  

当传入由 password_hash()支持的算法创建的有效哈希时,此函数将返回有关该哈希的信息数组。

当然只有这些

  

PASSWORD_DEFAULT - 使用bcrypt算法(默认自PHP 5.5.0起)。请注意,此常量旨在随着时间的推移而变化,因为新的和更强大的算法被添加到PHP中。因此,使用此标识符的结果长度可能会随时间而变化。因此,建议将结果存储在数据库列中,该列可以扩展到超过60个字符(255个字符将是一个不错的选择)。

     

PASSWORD_BCRYPT - 使用CRYPT_BLOWFISH算法创建哈希。这将使用&#34; $ 2y $&#34;生成标准的crypt()兼容哈希。标识符。结果将始终为60个字符的字符串,或者失败时为FALSE。