(PHP) Как использовать crypt () с CRYPT_BLOWFISH? - PullRequest
4 голосов
/ 10 февраля 2010

Во-первых, я вижу, что для использования CRYPT_BLOWFISH мне нужно использовать 16-символьную соль, начиная с $ 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$')

а потом остальные строки в порядке как есть?

1 Ответ

5 голосов
/ 10 февраля 2010

Для PHP до 5.3.0 crypt () использовал библиотеку, предоставляемую ОС. Если вы используете более раннюю версию, вам нужно проверить документацию вашей ОС, чтобы убедиться, что она поддерживается (проверьте значение константы 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 $).

НТН

С * * +1010

...