diff --git a/reference/password/functions/password-hash.xml b/reference/password/functions/password-hash.xml index 98808e768..0242fcf63 100644 --- a/reference/password/functions/password-hash.xml +++ b/reference/password/functions/password-hash.xml @@ -16,41 +16,40 @@ arrayoptions[] - password_hash создаёт хеш пароля используя сильный, - необратимый алгоритм хеширования. + Функция password_hash создаёт хеш пароля, используя сильный необратимый алгоритм хеширования. - В данный момент поддерживаются следующие алгоритмы: + Поддерживаются следующие алгоритмы: - PASSWORD_DEFAULT - используется алгоритм bcrypt (по умолчанию с PHP 5.5.0). - Обратите внимание, что используемый алгоритм может со временем меняться на более - сильный, когда таковой добавляется в PHP. Соответственно и длина результата может со - временем меняться. В связи с этим рекомендуется выбирать длину поля для хранения - в базе данных более 60 символов (255 символов могло быть хорошим вариантом). + PASSWORD_DEFAULT — будет выбран алгоритм bcrypt (по умолчанию с PHP 5.5.0). + Обратите внимание, алгоритм может измениться на более + сильный, когда такой добавится в PHP. При изменении алгоритма и длина результата + также может измениться. Поэтому длину поля для хранения + в базе данных лучше устанавливать более 60 символов (255 символов будет хорошим значением). - PASSWORD_BCRYPT - использует алгоритм - CRYPT_BLOWFISH. Генерирует стандартный хеш, совместимый - с генерированным функцией crypt с использованием - идентификатора "$2y$". В результате будет сгенерирована строка длиной 60 символов&return.falseforfailure;. + PASSWORD_BCRYPT — будет выбран алгоритм + CRYPT_BLOWFISH. Генерирует стандартный хеш с идентификатором "$2y$", + совместимый с тем, который генерирует функция crypt. + В результате будет сгенерирована строка длиной 60 символов&return.falseforfailure;. - PASSWORD_ARGON2I - Использовать алгоритм хеширования Argon2i. - Этот алгоритм доступен только если PHP собран с поддержкой Argon2. + PASSWORD_ARGON2I — будет выбран алгоритм хеширования Argon2i. + Этот алгоритм будет доступен, только если PHP собран с поддержкой Argon2. - PASSWORD_ARGON2ID - Использовать алгоритм хеширования Argon2id. - Этот алгоритм доступен только если PHP собран с поддержкой Argon2. + PASSWORD_ARGON2ID — будет выбран алгоритм хеширования Argon2id. + Этот алгоритм будет доступен, только если PHP собран с поддержкой Argon2. @@ -62,12 +61,12 @@ - salt (string) - для самостоятельного задания соли для хеширования. - Обратите внимание, что это приведёт к переопределению и предотвращению - автоматического создания соли. + salt (string) — для самостоятельного задания соли для хеширования. + Обратите внимание, что это приведёт к переопределению и предотвратит + автоматическое создание соли. - Если не задано, то password_hash будет генерировать + Если не задано, то функция password_hash будет генерировать случайную соль для каждого хешируемого пароля. Это предпочтительный режим работы. @@ -81,14 +80,14 @@ - cost (int) - задаёт необходимую алгоритмическую сложность. - Пример использования этого значения можно посмотреть на странице посвящённой + cost (int) — задаёт алгоритмическую сложность. + Пример с этой опцией можно посмотреть на странице, посвящённой функции crypt. - Если не задано, то будет использовано значение по умолчанию 10. - Это хорошая базовая стоимость, но вы можете её увеличить в зависимости - от возможностей своего оборудования. + Если не задано, то будет выбрано значение по умолчанию: 10. + Это хорошая базовая стоимость, но можно увеличить её, + если позволяет производительность оборудования. @@ -101,27 +100,27 @@ - memory_cost (int) - Максимальный размер - памяти (в килобайтах), которую можно использовать для вычисления хеша Argon2. - По умолчанию PASSWORD_ARGON2_DEFAULT_MEMORY_COST. + memory_cost (int) — максимальный размер + памяти (в килобайтах), которая будет использована для вычисления хеша Argon2. + По умолчанию будет выбрано значение константы PASSWORD_ARGON2_DEFAULT_MEMORY_COST. - time_cost (int) - Максимально возможное время, - которое можно потратить для вычисления хеша Argon2. - По умолчанию PASSWORD_ARGON2_DEFAULT_TIME_COST. + time_cost (int) — максимально возможное время, + которое можно потратить на вычисление хеша Argon2. + По умолчанию будет выбрано значение константы PASSWORD_ARGON2_DEFAULT_TIME_COST. - threads (int) - Количество потоков, которые - можно использовать для вычисления хеша Argon2. - По умолчанию PASSWORD_ARGON2_DEFAULT_THREADS. + threads (int) — количество потоков, которые + можно задействовать для вычисления хеша Argon2. + По умолчанию будет выбрано значение константы PASSWORD_ARGON2_DEFAULT_THREADS. - Доступно только тогда, когда PHP использует libargon2, но не при реализации libsodium. + Доступно только тогда, когда в PHP доступен модуль libargon2, но не при реализации libsodium. @@ -141,7 +140,7 @@ Использование алгоритма PASSWORD_BCRYPT приведёт - к обрезанию поля password до максимальной длины 72 байта. + к обрезанию поля password до максимальной длины — 72 байта. @@ -161,8 +160,8 @@ &password.parameter.options; - Если не задано, то будет использована стандартная стоимость и соль будет - генерироваться автоматически. + Если не задано, то будет использована стандартная стоимость, и соль будет + сгенерирована автоматически. @@ -175,10 +174,10 @@ Возвращает хешированный пароль. - Использованный алгоритм, стоимость и соль будут возвращены как часть хеша. - Таким образом, информация, необходимая для проверки хеша будет в него + Выбранный алгоритм, стоимость и соль будут возвращены как часть хеша. + Таким образом, информация, необходимая для проверки хеша, будет в него включена. Это позволит функции password_verify проверять - хеш без необходимости отдельного хранения информации о соли и алгоритме. + хеш без отдельного хранения информации о соли и алгоритме. @@ -197,9 +196,9 @@ 8.0.0 - password_hash больше не возвращает значение &false; в случае возникновения ошибки, - вместо этого будет выброшено исключение ValueError, - если алгоритм хеширования пароля недействителен или Error, + password_hash больше не возвращает значение &false; в случае возникновения ошибки. + Вместо этого будет выброшено исключение ValueError, + если алгоритм хеширования пароля недействителен, или Error, если хеширование пароля не удалось из-за неизвестной ошибки. @@ -212,7 +211,7 @@ 7.4.0 - Параметр algo сейчас ожидает строку (&string;), но всё ещё принимает + Параметр algo теперь ожидает строку (&string;), но всё ещё принимает число (&integer;) для обратной совместимости. @@ -249,12 +248,12 @@ @@ -296,19 +295,20 @@ $2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K - Пример поиска хорошего значения стоимости для <function>password_hash</function> + Пример поиска хорошего значения стоимости для функции <function>password_hash</function> - Пример использования <function>password_hash</function> с Argon2i + Пример использования функции <function>password_hash</function> с Argon2i Как было замечено выше, опция salt была объявлена устаревшей в PHP 7.0 и будет вызывать соответствующее предупреждение. - Поддержка ручного задания соли может быть удалена в более новых версиях. + Поддержка ручного задания соли была удалена в PHP 8.0. - Рекомендуется протестировать данную функцию на вашем железе для определения + Рекомендуется протестировать данную функцию на вашем оборудовании для определения оптимального значения алгоритмической сложности. Убедитесь, что с выбранной - сложностью функция выполняется быстрее 100 миллисекунд для интерактивных - систем. Скрипт показанный выше поможет вам выбрать подходящее значение. + сложностью функция выполняется быстрее 350 миллисекунд для интерактивных + систем. Скрипт в приведённом выше примере поможет выбрать оптимальное значение. @@ -387,14 +387,14 @@ echo 'Хеш Argon2i: ' . password_hash('rasmuslerdorf', PASSWORD_ARGON2I); 7.5.5, то задать по умолчанию его можно будет только в 7.7 (7.6 будет тем самым полным релизом, в течение которого он должен присутствовать, от 7.6.0 до 7.7.0). Но если новый алгоритм добавлен в 7.6.0, то его также можно будет задать по умолчанию - в 7.7.0. + в версии 7.7.0. Алгоритм по умолчанию может быть изменён только в полном релизе - (7.3.0, 8.0.0, и т.д.), но не в промежуточных. Единственное исключение - это - если в текущем алгоритме найдена критическая уязвимость. + (7.3.0, 8.0.0 и т. д.), но не в промежуточных. Единственное исключение — + это критическая уязвимость, найденная в текущем алгоритме. diff --git a/reference/password/functions/password-needs-rehash.xml b/reference/password/functions/password-needs-rehash.xml index 37f55c0c4..34ebcd690 100644 --- a/reference/password/functions/password-needs-rehash.xml +++ b/reference/password/functions/password-needs-rehash.xml @@ -1,5 +1,5 @@ - + @@ -75,7 +75,7 @@ 7.4.0 - Параметр algo сейчас ожидает строку (&string;), но всё ещё принимает + Параметр algo теперь ожидает строку (&string;), но всё ещё принимает число (&integer;) для обратной совместимости. @@ -97,16 +97,18 @@ $password = 'rasmuslerdorf'; $hash = '$2y$10$YCFsG6elYca568hBi2pZ0.3LDL5wjgxct1N8w/oLR/jfHsiQwCqTS'; -// Параметр стоимости может изменяться в связи со сменой оборудования -$options = array('cost' => 11); +$algorithm = PASSWORD_BCRYPT; +// Значение bcrypt-стоимости может измениться по мере роста производительности оборудования +$options = ['cost' => 12]; -// Проверка сохранённого хеша с помощью пароля +// Сравниваем сохранённый хеш с открытым паролем if (password_verify($password, $hash)) { - // Проверяем, не нужно ли использовать более новый алгоритм - // или другую алгоритмическую стоимость - if (password_needs_rehash($hash, PASSWORD_DEFAULT, $options)) { - // Если таки да, перехешируем и сохраняем новый хеш - $newHash = password_hash($password, PASSWORD_DEFAULT, $options); + // Проверяем, не изменился ли алгоритм или параметры + if (password_needs_rehash($hash, $algorithm, $options)) { + // Если были изменения, перехешируем и заменяем старый хеш новым + $newHash = password_hash($password, $algorithm, $options); + + // Обновляем запись пользователя новым $newHash } // Авторизуем пользователя