Во-первых, я вижу, что для использования CRYPT_BLOWFISH мне нужно использовать 16 char salt, начиная с $ 2a $. Однако в документации php.net для crypt () указано, что некоторые системы не поддерживают CRYPT_BLOWFISH. Как часто это происходит?
Далее, из их примера в документах, я вижу, что я использую crypt () следующим образом:
<?php $password = crypt('mypassword'); // let the salt be automatically generated /* You should pass the entire results of crypt() as the salt for comparing a password, to avoid problems when different hashing algorithms are used. (As it says above, standard DES-based password hashing uses a 2-character salt, but MD5-based hashing uses 12.) */ if (crypt($user_input, $password) == $password) { echo "Password verified!"; } ?>
Чтобы использовать CRYPT_BLOWFISH, единственное, что мне нужно изменить, – это первая строка, чтобы сделать это так;
crypt('mypassword', '$2a$07$usesomesillystringforsalt$')
а затем остальные строки прекрасны, как есть?
Для PHP до 5.3.0 crypt () используется lib, поставляемый ОС. Если вы используете более раннюю версию, вам нужно будет проверить документацию вашей ОС, чтобы узнать, поддерживается ли она (проверьте значение константы CRYPT_BLOWFISH) – если нет, то алгоритм реализован в расширении mcrypt () для PHP.
Пример, который вы цитировали в документах, кажется, не имеет большого смысла:
$stored_password=fetch_password($user); if (crypt($_REQUEST['password'],$stored_password)===$stored_password) { // note that crypt automatically extracts the salt and alogrithm type // from $stored_password ....
При создании пароля вам нужно указать только префикс ($ 2a $).
НТН
C.