Сравнение строк не работает с использованием php

Источник всех следующих строк: http://www.the-art-of-web.com/php/blowfish-crypt/

Я использую этот метод, чтобы проверить, принимает ли мой сервер шифрование Blowfish:

if(defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) echo "CRYPT_BLOWFISH is enabled!<br>";

И это нормально:

CRYPT_BLOWFISH включен!

Я использую этот метод для создания соли для иглобрюха.

function getBlowFishSalt() { 
    $salt = ""; 
    $salt_chars = array_merge(range('A','Z'), range('a','z'), range(0,9)); 
    for($i=0; $i < 22; $i++) { 
        $salt .= $salt_chars[array_rand($salt_chars)]; 
    }

    return ($salt);
} 

И это нормально. Я использую следующее

ZTbCMA3q8QY3A9a6E13JSn

Я использую следующий метод для шифрования пароля:

function crypt_blowfish($input, $salt, $rounds = 12) { 
    return crypt($input, sprintf('$2a$%02d$', $rounds) . $salt); 
}

используя эти шаги:

$salt = "ZTbCMA3q8QY3A9a6E13JSn";

$password = "just_a_password";
print($password . " crypted as : <input type='text' size='80' value='" . crypt_blowfish($password, $salt) . "'><br>");

Я получаю следующий хешированный пароль:

$2a$12$ZTbCMA3q8QY3A9a6E13JSe7pxGA6JsO.ksFGGeayxWXhcJalJ5ytm

Затем я пытаюсь сравнить вещи:

$hashedPassword = "$2a$12$ZTbCMA3q8QY3A9a6E13JSe7pxGA6JsO.ksFGGeayxWXhcJalJ5ytm";

if (crypt_blowfish("just_a_password", $salt) == $hashedPassword)
    print ("just_a_password" . "recognized<br>");
else 
    print ("just_a_password" . " ---------- " . crypt_blowfish("just_a_password", $salt) . " ------------- " ." ko<br>");

if (crypt_blowfish("just_a_password", $salt) === $hashedPassword)
    print ("just_a_password" . "recognized<br>");
else 
    print ("just_a_password" . " ---------- " . crypt_blowfish("just_a_password", $salt) . " ------------- " ." ko<br>");

if (strcmp(crypt_blowfish("just_a_password", $salt), $hashedPassword) == 0)
    print ("just_a_password" . "recognized<br>");
else 
    print ("just_a_password" . " ---------- " . crypt_blowfish("just_a_password", $salt) . " ------------- " ." ko<br>");

Но ни один из них не возвращает мне результат OK. На экране и в HTML-коде строки абсолютно одинаковы, поэтому я не понимаю, почему php-код не распознает их как одинаковые.

Можешь мне помочь ?


person Oliver    schedule 18.05.2014    source источник


Ответы (1)


Оливер,

Я думаю, что понял вашу проблему: когда вы используете двойные кавычки, php интерпретирует строки с $ как переменные. Если вы измените

$hashedPassword = "$2a$12$ZTbCMA3q8QY3A9a6E13JSe7pxGA6JsO.ksFGGeayxWXhcJalJ5ytm";
print($hashedPassword);

to:

$hashedPassword = '$2a$12$ZTbCMA3q8QY3A9a6E13JSe7pxGA6JsO.ksFGGeayxWXhcJalJ5ytm';
print($hashedPassword);

ваш код должен начать работать.

Вы можете увидеть разницу с операторами печати.

person iewebguy    schedule 19.05.2014
comment
Вы победитель :-) Спасибо, я пропустил это. - person Oliver; 19.05.2014