Понимание PHP crypt() возвращаемое значение
Говорят, что функция PHP crypt имеет следующее возвращаемое значение:
"Returns the hashed string or a string that is shorter than 13 characters and is
guaranteed to differ from the salt on failure."
Я не понимаю, что это значит... Я в основном понял, как работает эта функция, но я хотел бы знать, как интерпретировать возвращаемое значение и пытаться понять, КОГДА это условие возникает... это, безусловно, один из самых смутных объяснения в руководстве по PHP или, может быть, я просто слеп на то, чтобы сниматься в нем слишком долго...?:)
1 ответ
В документации склепа упоминается одна вещь:
(5.3.2) Исправлено поведение Blowfish в недопустимых раундах, чтобы возвращать строку "fail" ("*0" или "*1") вместо возврата к DES.
По-видимому crypt
может возвращать разные [плохо определенные] короткие строки при неудаче. Я подозреваю, что "или" должен объяснить "отличается от соли".
Таким образом, строка "короче 13 символов" (кто что знает) -> ошибка. Единственный документированный случай касается недопустимых опций Blowfish, но может быть расширен в будущем. (Хотя ошибка отсутствует в документации, ошибка № 64449 указывает на то, что для алгоритмов должен возвращаться "сбой" всякий раз, когда соль недействительна.)
То, что соль никогда не возвращается, может быть связано с ошибкой # 55439:
Если crypt() выполняется с солями MD5, возвращаемое значение состоит только из соли.
Следствием является $valid = crypt($pw, $crypt);
TRUE для любого $pw.
Таким образом, гарантируя, что сама соль не будет возвращена, она избегает цикла обратной связи, где сохраненные хэши - только соль из-за ошибки - всегда будут регистрироваться как действительные для любого пароля. Ограничение, что соль не возвращается, может смягчить вырожденные взаимодействия различных (исправленных и незапатченных?) Серверов.
Кроме того, кто-нибудь знает, как найти точечную документацию для конкретных версий PHP? Было бы интересно увидеть, когда было добавлено предложение "отличается от соли".