mirror of
https://github.com/php/doc-ru.git
synced 2025-08-02 00:21:51 +00:00
Обновление до английской версии (#526)
Co-authored-by: Sergey Panteleev <sergey@php.net>
This commit is contained in:
@ -16,41 +16,40 @@
|
|||||||
<methodparam choice="opt"><type>array</type><parameter>options</parameter><initializer>[]</initializer></methodparam>
|
<methodparam choice="opt"><type>array</type><parameter>options</parameter><initializer>[]</initializer></methodparam>
|
||||||
</methodsynopsis>
|
</methodsynopsis>
|
||||||
<para>
|
<para>
|
||||||
<function>password_hash</function> создаёт хеш пароля используя сильный,
|
Функция <function>password_hash</function> создаёт хеш пароля, используя сильный необратимый алгоритм хеширования.
|
||||||
необратимый алгоритм хеширования.
|
|
||||||
</para>
|
</para>
|
||||||
<simpara>
|
<simpara>
|
||||||
В данный момент поддерживаются следующие алгоритмы:
|
Поддерживаются следующие алгоритмы:
|
||||||
</simpara>
|
</simpara>
|
||||||
<para>
|
<para>
|
||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
<listitem>
|
<listitem>
|
||||||
<simpara>
|
<simpara>
|
||||||
<constant>PASSWORD_DEFAULT</constant> - используется алгоритм bcrypt (по умолчанию с PHP 5.5.0).
|
<constant>PASSWORD_DEFAULT</constant> — будет выбран алгоритм bcrypt (по умолчанию с PHP 5.5.0).
|
||||||
Обратите внимание, что используемый алгоритм может со временем меняться на более
|
Обратите внимание, алгоритм может измениться на более
|
||||||
сильный, когда таковой добавляется в PHP. Соответственно и длина результата может со
|
сильный, когда такой добавится в PHP. При изменении алгоритма и длина результата
|
||||||
временем меняться. В связи с этим рекомендуется выбирать длину поля для хранения
|
также может измениться. Поэтому длину поля для хранения
|
||||||
в базе данных более 60 символов (255 символов могло быть хорошим вариантом).
|
в базе данных лучше устанавливать более 60 символов (255 символов будет хорошим значением).
|
||||||
</simpara>
|
</simpara>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<simpara>
|
<simpara>
|
||||||
<constant>PASSWORD_BCRYPT</constant> - использует алгоритм
|
<constant>PASSWORD_BCRYPT</constant> — будет выбран алгоритм
|
||||||
<constant>CRYPT_BLOWFISH</constant>. Генерирует стандартный хеш, совместимый
|
<constant>CRYPT_BLOWFISH</constant>. Генерирует стандартный хеш с идентификатором "$2y$",
|
||||||
с генерированным функцией <function>crypt</function> с использованием
|
совместимый с тем, который генерирует функция <function>crypt</function>.
|
||||||
идентификатора "$2y$". В результате будет сгенерирована строка длиной 60 символов&return.falseforfailure;.
|
В результате будет сгенерирована строка длиной 60 символов&return.falseforfailure;.
|
||||||
</simpara>
|
</simpara>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<simpara>
|
<simpara>
|
||||||
<constant>PASSWORD_ARGON2I</constant> - Использовать алгоритм хеширования Argon2i.
|
<constant>PASSWORD_ARGON2I</constant> — будет выбран алгоритм хеширования Argon2i.
|
||||||
Этот алгоритм доступен только если PHP собран с поддержкой Argon2.
|
Этот алгоритм будет доступен, только если PHP собран с поддержкой Argon2.
|
||||||
</simpara>
|
</simpara>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<simpara>
|
<simpara>
|
||||||
<constant>PASSWORD_ARGON2ID</constant> - Использовать алгоритм хеширования Argon2id.
|
<constant>PASSWORD_ARGON2ID</constant> — будет выбран алгоритм хеширования Argon2id.
|
||||||
Этот алгоритм доступен только если PHP собран с поддержкой Argon2.
|
Этот алгоритм будет доступен, только если PHP собран с поддержкой Argon2.
|
||||||
</simpara>
|
</simpara>
|
||||||
</listitem>
|
</listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
@ -62,12 +61,12 @@
|
|||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
<literal>salt</literal> (<type>string</type>) - для самостоятельного задания соли для хеширования.
|
<literal>salt</literal> (<type>string</type>) — для самостоятельного задания соли для хеширования.
|
||||||
Обратите внимание, что это приведёт к переопределению и предотвращению
|
Обратите внимание, что это приведёт к переопределению и предотвратит
|
||||||
автоматического создания соли.
|
автоматическое создание соли.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Если не задано, то <function>password_hash</function> будет генерировать
|
Если не задано, то функция <function>password_hash</function> будет генерировать
|
||||||
случайную соль для каждого хешируемого пароля. Это предпочтительный
|
случайную соль для каждого хешируемого пароля. Это предпочтительный
|
||||||
режим работы.
|
режим работы.
|
||||||
</para>
|
</para>
|
||||||
@ -81,14 +80,14 @@
|
|||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
<literal>cost</literal> (<type>int</type>) - задаёт необходимую алгоритмическую сложность.
|
<literal>cost</literal> (<type>int</type>) — задаёт алгоритмическую сложность.
|
||||||
Пример использования этого значения можно посмотреть на странице посвящённой
|
Пример с этой опцией можно посмотреть на странице, посвящённой
|
||||||
функции <function>crypt</function>.
|
функции <function>crypt</function>.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Если не задано, то будет использовано значение по умолчанию <literal>10</literal>.
|
Если не задано, то будет выбрано значение по умолчанию: <literal>10</literal>.
|
||||||
Это хорошая базовая стоимость, но вы можете её увеличить в зависимости
|
Это хорошая базовая стоимость, но можно увеличить её,
|
||||||
от возможностей своего оборудования.
|
если позволяет производительность оборудования.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
@ -101,27 +100,27 @@
|
|||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
<literal>memory_cost</literal> (<type>int</type>) - Максимальный размер
|
<literal>memory_cost</literal> (<type>int</type>) — максимальный размер
|
||||||
памяти (в килобайтах), которую можно использовать для вычисления хеша Argon2.
|
памяти (в килобайтах), которая будет использована для вычисления хеша Argon2.
|
||||||
По умолчанию <constant>PASSWORD_ARGON2_DEFAULT_MEMORY_COST</constant>.
|
По умолчанию будет выбрано значение константы <constant>PASSWORD_ARGON2_DEFAULT_MEMORY_COST</constant>.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
<literal>time_cost</literal> (<type>int</type>) - Максимально возможное время,
|
<literal>time_cost</literal> (<type>int</type>) — максимально возможное время,
|
||||||
которое можно потратить для вычисления хеша Argon2.
|
которое можно потратить на вычисление хеша Argon2.
|
||||||
По умолчанию <constant>PASSWORD_ARGON2_DEFAULT_TIME_COST</constant>.
|
По умолчанию будет выбрано значение константы <constant>PASSWORD_ARGON2_DEFAULT_TIME_COST</constant>.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
<literal>threads</literal> (<type>int</type>) - Количество потоков, которые
|
<literal>threads</literal> (<type>int</type>) — количество потоков, которые
|
||||||
можно использовать для вычисления хеша Argon2.
|
можно задействовать для вычисления хеша Argon2.
|
||||||
По умолчанию <constant>PASSWORD_ARGON2_DEFAULT_THREADS</constant>.
|
По умолчанию будет выбрано значение константы <constant>PASSWORD_ARGON2_DEFAULT_THREADS</constant>.
|
||||||
</para>
|
</para>
|
||||||
<warning>
|
<warning>
|
||||||
<para>
|
<para>
|
||||||
Доступно только тогда, когда PHP использует libargon2, но не при реализации libsodium.
|
Доступно только тогда, когда в PHP доступен модуль libargon2, но не при реализации libsodium.
|
||||||
</para>
|
</para>
|
||||||
</warning>
|
</warning>
|
||||||
</listitem>
|
</listitem>
|
||||||
@ -141,7 +140,7 @@
|
|||||||
<caution>
|
<caution>
|
||||||
<para>
|
<para>
|
||||||
Использование алгоритма <constant>PASSWORD_BCRYPT</constant> приведёт
|
Использование алгоритма <constant>PASSWORD_BCRYPT</constant> приведёт
|
||||||
к обрезанию поля <parameter>password</parameter> до максимальной длины 72 байта.
|
к обрезанию поля <parameter>password</parameter> до максимальной длины — 72 байта.
|
||||||
</para>
|
</para>
|
||||||
</caution>
|
</caution>
|
||||||
</listitem>
|
</listitem>
|
||||||
@ -161,8 +160,8 @@
|
|||||||
&password.parameter.options;
|
&password.parameter.options;
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Если не задано, то будет использована стандартная стоимость и соль будет
|
Если не задано, то будет использована стандартная стоимость, и соль будет
|
||||||
генерироваться автоматически.
|
сгенерирована автоматически.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
@ -175,10 +174,10 @@
|
|||||||
Возвращает хешированный пароль.
|
Возвращает хешированный пароль.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Использованный алгоритм, стоимость и соль будут возвращены как часть хеша.
|
Выбранный алгоритм, стоимость и соль будут возвращены как часть хеша.
|
||||||
Таким образом, информация, необходимая для проверки хеша будет в него
|
Таким образом, информация, необходимая для проверки хеша, будет в него
|
||||||
включена. Это позволит функции <function>password_verify</function> проверять
|
включена. Это позволит функции <function>password_verify</function> проверять
|
||||||
хеш без необходимости отдельного хранения информации о соли и алгоритме.
|
хеш без отдельного хранения информации о соли и алгоритме.
|
||||||
</para>
|
</para>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
@ -197,9 +196,9 @@
|
|||||||
<row>
|
<row>
|
||||||
<entry>8.0.0</entry>
|
<entry>8.0.0</entry>
|
||||||
<entry>
|
<entry>
|
||||||
<function>password_hash</function> больше не возвращает значение &false; в случае возникновения ошибки,
|
<function>password_hash</function> больше не возвращает значение &false; в случае возникновения ошибки.
|
||||||
вместо этого будет выброшено исключение <classname>ValueError</classname>,
|
Вместо этого будет выброшено исключение <classname>ValueError</classname>,
|
||||||
если алгоритм хеширования пароля недействителен или <classname>Error</classname>,
|
если алгоритм хеширования пароля недействителен, или <classname>Error</classname>,
|
||||||
если хеширование пароля не удалось из-за неизвестной ошибки.
|
если хеширование пароля не удалось из-за неизвестной ошибки.
|
||||||
</entry>
|
</entry>
|
||||||
</row>
|
</row>
|
||||||
@ -212,7 +211,7 @@
|
|||||||
<row>
|
<row>
|
||||||
<entry>7.4.0</entry>
|
<entry>7.4.0</entry>
|
||||||
<entry>
|
<entry>
|
||||||
Параметр <parameter>algo</parameter> сейчас ожидает строку (&string;), но всё ещё принимает
|
Параметр <parameter>algo</parameter> теперь ожидает строку (&string;), но всё ещё принимает
|
||||||
число (&integer;) для обратной совместимости.
|
число (&integer;) для обратной совместимости.
|
||||||
</entry>
|
</entry>
|
||||||
</row>
|
</row>
|
||||||
@ -249,12 +248,12 @@
|
|||||||
<![CDATA[
|
<![CDATA[
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Мы просто хотим захешировать свой пароль используя настройки по умолчанию.
|
* Мы просто хотим захешировать пароль с настройками по умолчанию.
|
||||||
* Значит будет использован BCRYPT и результат будет 60 символов длиной.
|
* Значит, будет выбран алгоритм BCRYPT и результат будет длиной 60 символов.
|
||||||
*
|
*
|
||||||
* Помните, что алгоритм по умолчанию может измениться в будущем, так что
|
* Помните, что алгоритм по умолчанию может измениться в будущем, так что
|
||||||
* имеет смысл заранее позаботиться о том, чтобы система хранения хешей
|
* имеет смысл заранее позаботиться о том, чтобы система хранения хешей
|
||||||
* смогла хранить более 60 символов (255 в самый раз)
|
* смогла хранить более 60 символов (а лучше 255)
|
||||||
*/
|
*/
|
||||||
echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
|
echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
|
||||||
?>
|
?>
|
||||||
@ -296,19 +295,20 @@ $2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
<example>
|
<example>
|
||||||
<title>Пример поиска хорошего значения стоимости для <function>password_hash</function></title>
|
<title>Пример поиска хорошего значения стоимости для функции <function>password_hash</function></title>
|
||||||
<programlisting role="php">
|
<programlisting role="php">
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Данный код замерит скорость выполнения операции хеширования для вашего сервера
|
* Данный код замерит скорость выполнения операции с разными значениями алгоритмической сложности хеширования
|
||||||
* с разными значениями алгоритмической сложности для определения максимального
|
* на вашем сервере и определит
|
||||||
* его значения, не приводящего к деградации производительности. Хорошее базовое
|
* его максимальное значение, не приводящее к деградации производительности. Хорошее базовое
|
||||||
* значение лежит в диапазоне 8-10, но если ваш сервер достаточно мощный, то можно
|
* значение — 10, но если ваш сервер достаточно мощный, то можно
|
||||||
* задать и больше. Данный скрипт ищет максимальное значение, при котором
|
* задать и больше. Данный скрипт ищет максимальное значение, при котором
|
||||||
* хеширование уложится в 50 миллисекунд.
|
* хеширование уложится в значение ≤ 350 миллисекундам, что считается приемлемой задержкой
|
||||||
|
* для систем, которые обрабатывают интерактивные входы.
|
||||||
*/
|
*/
|
||||||
$timeTarget = 0.05; // 50 миллисекунд.
|
$timeTarget = 0.350; // 350 миллисекунд.
|
||||||
|
|
||||||
$cost = 8;
|
$cost = 8;
|
||||||
do {
|
do {
|
||||||
@ -325,14 +325,14 @@ echo "Оптимальная стоимость: " . $cost;
|
|||||||
&example.outputs.similar;
|
&example.outputs.similar;
|
||||||
<screen>
|
<screen>
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
Оптимальная стоимость: 10
|
Оптимальная стоимость: 12
|
||||||
]]>
|
]]>
|
||||||
</screen>
|
</screen>
|
||||||
</example>
|
</example>
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
<example>
|
<example>
|
||||||
<title>Пример использования <function>password_hash</function> с Argon2i</title>
|
<title>Пример использования функции <function>password_hash</function> с Argon2i</title>
|
||||||
<programlisting role="php">
|
<programlisting role="php">
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
<?php
|
<?php
|
||||||
@ -361,15 +361,15 @@ echo 'Хеш Argon2i: ' . password_hash('rasmuslerdorf', PASSWORD_ARGON2I);
|
|||||||
<para>
|
<para>
|
||||||
Как было замечено выше, опция <literal>salt</literal> была объявлена
|
Как было замечено выше, опция <literal>salt</literal> была объявлена
|
||||||
устаревшей в PHP 7.0 и будет вызывать соответствующее предупреждение.
|
устаревшей в PHP 7.0 и будет вызывать соответствующее предупреждение.
|
||||||
Поддержка ручного задания соли может быть удалена в более новых версиях.
|
Поддержка ручного задания соли была удалена в PHP 8.0.
|
||||||
</para>
|
</para>
|
||||||
</caution>
|
</caution>
|
||||||
<note>
|
<note>
|
||||||
<para>
|
<para>
|
||||||
Рекомендуется протестировать данную функцию на вашем железе для определения
|
Рекомендуется протестировать данную функцию на вашем оборудовании для определения
|
||||||
оптимального значения алгоритмической сложности. Убедитесь, что с выбранной
|
оптимального значения алгоритмической сложности. Убедитесь, что с выбранной
|
||||||
сложностью функция выполняется быстрее 100 миллисекунд для интерактивных
|
сложностью функция выполняется быстрее 350 миллисекунд для интерактивных
|
||||||
систем. Скрипт показанный выше поможет вам выбрать подходящее значение.
|
систем. Скрипт в приведённом выше примере поможет выбрать оптимальное значение.
|
||||||
</para>
|
</para>
|
||||||
</note>
|
</note>
|
||||||
<note>
|
<note>
|
||||||
@ -387,14 +387,14 @@ echo 'Хеш Argon2i: ' . password_hash('rasmuslerdorf', PASSWORD_ARGON2I);
|
|||||||
7.5.5, то задать по умолчанию его можно будет только в 7.7 (7.6 будет тем самым
|
7.5.5, то задать по умолчанию его можно будет только в 7.7 (7.6 будет тем самым
|
||||||
полным релизом, в течение которого он должен присутствовать, от 7.6.0 до 7.7.0). Но
|
полным релизом, в течение которого он должен присутствовать, от 7.6.0 до 7.7.0). Но
|
||||||
если новый алгоритм добавлен в 7.6.0, то его также можно будет задать по умолчанию
|
если новый алгоритм добавлен в 7.6.0, то его также можно будет задать по умолчанию
|
||||||
в 7.7.0.
|
в версии 7.7.0.
|
||||||
</simpara>
|
</simpara>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<simpara>
|
<simpara>
|
||||||
Алгоритм по умолчанию может быть изменён только в полном релизе
|
Алгоритм по умолчанию может быть изменён только в полном релизе
|
||||||
(7.3.0, 8.0.0, и т.д.), но не в промежуточных. Единственное исключение - это
|
(7.3.0, 8.0.0 и т. д.), но не в промежуточных. Единственное исключение —
|
||||||
если в текущем алгоритме найдена критическая уязвимость.
|
это критическая уязвимость, найденная в текущем алгоритме.
|
||||||
</simpara>
|
</simpara>
|
||||||
</listitem>
|
</listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- EN-Revision: 39148ec514f3868668483448015e8b97b3265953 Maintainer: rjhdby Status: ready -->
|
<!-- EN-Revision: ff492e168a557e4dd17574023b7c3cb21b14df3b Maintainer: rjhdby Status: ready -->
|
||||||
<!-- Reviewed: no -->
|
<!-- Reviewed: no -->
|
||||||
<refentry xml:id="function.password-needs-rehash" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
<refentry xml:id="function.password-needs-rehash" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
<refnamediv>
|
<refnamediv>
|
||||||
@ -75,7 +75,7 @@
|
|||||||
<row>
|
<row>
|
||||||
<entry>7.4.0</entry>
|
<entry>7.4.0</entry>
|
||||||
<entry>
|
<entry>
|
||||||
Параметр <parameter>algo</parameter> сейчас ожидает строку (&string;), но всё ещё принимает
|
Параметр <parameter>algo</parameter> теперь ожидает строку (&string;), но всё ещё принимает
|
||||||
число (&integer;) для обратной совместимости.
|
число (&integer;) для обратной совместимости.
|
||||||
</entry>
|
</entry>
|
||||||
</row>
|
</row>
|
||||||
@ -97,16 +97,18 @@
|
|||||||
$password = 'rasmuslerdorf';
|
$password = 'rasmuslerdorf';
|
||||||
$hash = '$2y$10$YCFsG6elYca568hBi2pZ0.3LDL5wjgxct1N8w/oLR/jfHsiQwCqTS';
|
$hash = '$2y$10$YCFsG6elYca568hBi2pZ0.3LDL5wjgxct1N8w/oLR/jfHsiQwCqTS';
|
||||||
|
|
||||||
// Параметр стоимости может изменяться в связи со сменой оборудования
|
$algorithm = PASSWORD_BCRYPT;
|
||||||
$options = array('cost' => 11);
|
// Значение bcrypt-стоимости может измениться по мере роста производительности оборудования
|
||||||
|
$options = ['cost' => 12];
|
||||||
|
|
||||||
// Проверка сохранённого хеша с помощью пароля
|
// Сравниваем сохранённый хеш с открытым паролем
|
||||||
if (password_verify($password, $hash)) {
|
if (password_verify($password, $hash)) {
|
||||||
// Проверяем, не нужно ли использовать более новый алгоритм
|
// Проверяем, не изменился ли алгоритм или параметры
|
||||||
// или другую алгоритмическую стоимость
|
if (password_needs_rehash($hash, $algorithm, $options)) {
|
||||||
if (password_needs_rehash($hash, PASSWORD_DEFAULT, $options)) {
|
// Если были изменения, перехешируем и заменяем старый хеш новым
|
||||||
// Если таки да, перехешируем и сохраняем новый хеш
|
$newHash = password_hash($password, $algorithm, $options);
|
||||||
$newHash = password_hash($password, PASSWORD_DEFAULT, $options);
|
|
||||||
|
// Обновляем запись пользователя новым $newHash
|
||||||
}
|
}
|
||||||
|
|
||||||
// Авторизуем пользователя
|
// Авторизуем пользователя
|
||||||
|
Reference in New Issue
Block a user