Успешный пример Blowfish и Crypt?

Я читаю о защите паролей и хочу получить отзыв о правильности моего кода. Я пытаюсь использовать blowfish и crypt() вместе, чтобы никто не мог расшифровать пароли. Кроме того, у меня есть вопрос. Когда я сохраняю пароль, я предполагаю, что мне также нужно будет сохранить переменную $string, чтобы я мог снова использовать ее для проверки пользователя, когда он входит в систему, верно?

function unique_md5() {
  mt_srand(microtime(true)*100000 + memory_get_usage(true));
  return md5(uniqid(mt_rand(), true));
}

//unique_md5 returns a random 16 character string

$string = '$2a$07$' . unique_md5();

$password = 'password';

$password = trim($password);

$protected_password = crypt($password, $string); 

//then store the variables $string and $protected_password into the database

person thank_you    schedule 02.09.2012    source источник
comment
chilkatsoft.com/p/php_blowfish.asp – Google   -  person Nate-Wilkins    schedule 03.09.2012
comment
$cleartext Я полагаю, это то, что шифруется?   -  person thank_you    schedule 03.09.2012


Ответы (2)


Blowfish принимает в качестве соли строку из 22 символов (не включая тип и параметр стоимости). MD5 возвращает строку 32 символов, которая не принимается crypt_blowfish. Используйте правильные соли.

person Madara's Ghost    schedule 02.09.2012
comment
Итак, если я могу вернуть MD5, отрезав последние или первые 10 строк символов, будет ли это приемлемым или устранит случайность MD5? - person thank_you; 03.09.2012
comment
Предоставление более длинной соли автоматически использует только начальные 22 символа, никакой специальной обработки не требуется. - person lanzz; 03.09.2012
comment
Просто чтобы проверить, тип и параметр стоимости, на которые вы ссылались, - это строка $2a$07$, верно? - person thank_you; 03.09.2012

Нет, вам не нужно хранить соль с зашифрованным паролем, так как зашифрованный пароль возвращается вам с уже добавленной солью. Когда вы проверяете, соответствует ли незашифрованный пароль зашифрованному паролю, вам нужно только проверить, соответствует ли $crypted_password == crypt($plaintext_password, $crypted_password).

person lanzz    schedule 02.09.2012