Why does password_verify work on old passwords generated with crypt and a random salt?
我知道
但是,我有一个来自PHP5.4环境的旧哈希数据库,它使用了crypt和随机生成的salt。令我惊讶的是,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | php > echo crypt('test1','salt'); saTBKtwSCLJ0A php > echo crypt('test1','sa_anything'); saTBKtwSCLJ0A php > echo crypt('test1','newsalt'); ne0fA1VwB4hx2 php > echo crypt('test3','$6$salt'); $6$salt$NGtBMjsb3SEYv95mjN8yKuZMkYSjFJQDt8yu8JMnXJLv/NWugOVDTnqPeBqp94mf6T20sHoY.wSNWwtTSPvqM0 php > var_dump(password_get_info('$6$salt$NGtBMjsb3SEYv95mjN8yKuZMkYSjFJQDt8yu8JMnXJLv/NWugOVDTnqPeBqp94mf6T20sHoY.wSNWwtTSPvqM0')); array(3) { ["algo"]=> int(0) ["algoName"]=> string(7)"unknown" ["options"]=> array(0) { } } |
This function can be used to verify hashes created with other functions like crypt().
号
但不说为什么。
我想知道在后台发生了什么,以及
"hash"实际上包含了散列机制和字符串开头的salt。
在您的示例中,
函数很容易得到正确的算法,并根据其散列值检查实际的密码。