Источник всех следующих строк: 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-код не распознает их как одинаковые.
Можешь мне помочь ?