Одна вещь crypt documentation упоминает:
(5.3.2) Исправлено поведение Blowfish на недействительных раундов, чтобы вернуться "неудача" строка ("* 0" или "* 1"), вместо того, возвращаясь к DES.
По-видимому crypt
может возвращать различные [плохо указанные] короткие строки при отказе. Я подозреваю, что бит «или« должен учитывать »отличается от соли».
Таким образом, строка «короче 13 символов» (о том, кто знает, что) -> сбой. Единственный документированный случай касается недействительных параметров Blowfish, но его можно было бы расширить в будущем. (Хотя не в документации, bug #64449 указывает на то, что «отказ» должен быть возвращен для алгоритмов, когда соль является недействительным.)
Рациональный, что соль никогда не возвращается могут быть связаны с bug #55439:
Если crypt() выполняется с солями MD5, возвращаемое значение составляет только соль.
Последствием является $valid = crypt($pw, $crypt);
ИСТИНА, для любых $ pw.
Таким образом, гарантируя, что соль сама по себе не возвращается, она позволяет избежать цикла обратной связи, в котором хранятся хэши - только соль из-за ошибки - всегда регистрируются как действительные для любого пароля. Ограничение на то, что соль не возвращается может смягчить вырожденные взаимодействия разных (исправленных и непроверенных?) Серверов.
Кроме того, кто-нибудь знает, как найти точечную документацию для определенных версий PHP? Было бы интересно увидеть, когда была добавлена статья «отличная от соли».
Dunno, насколько это важно, но 'crypt' может, конечно, терпеть неудачу, когда вы это называете неправильным - то есть: когда' $ str' (или '$ salt', если предоставлено) не могут быть законно превращены в строку. Например, если вы передаете массив, ресурс или экземпляр класса, который не определяет функцию '__toString(). На моей машине, однако, это заставляет 'crypt' возвращать' null', а не строку. – cHao
gotcha ... хорошо, хотя он может передать короткую строку как признак сбоя. Мне интересно узнать, почему они говорят, что она отличается от соли при неудаче ... –