mirror of
https://github.com/php/doc-ru.git
synced 2026-03-24 07:42:22 +01:00
258 lines
12 KiB
XML
258 lines
12 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: d76a7fe17dd2488e47d664a8ab38e161b13ac843 Maintainer: shein Status: ready -->
|
||
<!-- Reviewed: no -->
|
||
<refentry xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://docbook.org/ns/docbook" xml:id="function.crypt">
|
||
<refnamediv>
|
||
<refname>crypt</refname>
|
||
<refpurpose>Хеширует строку необратимым способом</refpurpose>
|
||
</refnamediv>
|
||
|
||
<refsynopsisdiv>
|
||
¬e.not-bin-safe;
|
||
</refsynopsisdiv>
|
||
|
||
<refsect1 role="description">
|
||
&reftitle.description;
|
||
<methodsynopsis>
|
||
<type>string</type><methodname>crypt</methodname>
|
||
<methodparam><modifier role="attribute">#[\SensitiveParameter]</modifier><type>string</type><parameter>string</parameter></methodparam>
|
||
<methodparam><type>string</type><parameter>salt</parameter></methodparam>
|
||
</methodsynopsis>
|
||
<para>
|
||
Функция <function>crypt</function> возвращает строку, которую она захешировала
|
||
стандартным алгоритмом UNIX на основе <abbrev>DES</abbrev> или другого алгоритма.
|
||
Функция <function>password_verify</function> совместима с функцией <function>crypt</function>.
|
||
Следовательно, хеши паролей, которые создали функцией <function>crypt</function>,
|
||
можно использовать в функции <function>password_verify</function>.
|
||
</para>
|
||
<para>
|
||
До версии PHP 8.0.0 параметр <parameter>salt</parameter> был необязательным.
|
||
Однако функция <function>crypt</function> без параметра <parameter>salt</parameter> создаёт слабый хеш,
|
||
а без него выдаёт ошибку уровня <constant>E_NOTICE</constant>.
|
||
Разработчики задают сложную соль, чтобы улучшить безопасность.
|
||
</para>
|
||
<para>
|
||
Функция <function>password_hash</function> использует сложный хеш, генерирует сложную соль и применяет
|
||
правильно количество раундов хеширования автоматически.
|
||
Функция <function>password_hash</function> — простая обёртка над функцией <function>crypt</function>
|
||
и совместима с существующими хешами паролей. Поэтому приветствуется работа с функцией <function>password_hash</function>.
|
||
</para>
|
||
<para>
|
||
Вид хеширования определяется переданным аргументом salt (соль).
|
||
Если соль не указали, функция автоматически сгенерирует стандартную случайную
|
||
двухсимвольную (DES) или двенадцатисимвольную (MD5) соль, в
|
||
зависимости от доступности алгоритма MD5 в функции crypt().
|
||
Предопределённая константа <constant>CRYPT_SALT_LENGTH</constant>
|
||
помогает определить максимально доступную длину соли
|
||
в соответствии с алгоритмами.
|
||
</para>
|
||
<para>
|
||
Стандартная функция <function>crypt</function> на основе алгоритма DES
|
||
возвращает соль как первые два символа возвращаемой
|
||
строки. Кроме того, функция использует только первые восемь символов
|
||
строки <parameter>string</parameter>, поэтому более длинные строки,
|
||
которые начинаются с тех же восьми символов, сгенерируют один и тот же
|
||
результат (при одинаковой соли).
|
||
</para>
|
||
<simpara>
|
||
Поддерживаются следующие типы хешей:
|
||
</simpara>
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara>
|
||
<constant>CRYPT_STD_DES</constant> — Стандартное DES-шифрование
|
||
с двухсимвольной солью из алфавита «./0-9A-Za-z».
|
||
Другие символы в соли повлекут за собой отказ работы функции crypt().
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
<constant>CRYPT_EXT_DES</constant> — Расширенное DES-шифрование.
|
||
«Соль» — 9-символьная строкой, которая состоит из символа подчёркивания,
|
||
за которым следуют 4 символа счётчика итерации и 4 символа соли.
|
||
Каждая из этих 4-символьных строк кодирует 24 бита, наименьший символ первым.
|
||
Значения от <literal>0</literal> до <literal>63</literal> кодируются как <literal>./0-9A-Za-z</literal>.
|
||
Недопустимые символы в соли приведут к ошибке функции crypt().
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
<constant>CRYPT_MD5</constant> — MD5-шифрование с 12-символьной
|
||
солью, которая начинается с последовательности символов $1$.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
<constant>CRYPT_BLOWFISH</constant> — Blowfish-шифрование со
|
||
следующей солью: «$2a$», «$2x$» или «$2y$», весовой параметр из двух цифр, «$» и
|
||
22 цифры из алфавита «./0-9A-Za-z». Другие
|
||
символы в соли повлекут за собой возврат пустой строки.
|
||
Весовой параметр из двух цифр — двоичный логарифм
|
||
счётчика итераций нижележащего хеширующего алгоритма, который основан
|
||
на криптографическом алгоритме Blowfish, и должен находиться в диапазоне 04-31, значения вне
|
||
этого диапазона вызовут отказ функции crypt().
|
||
Хеши «$2x$» потенциально слабые; Хэши «$2a$» совместимы
|
||
и смягчают эту слабость. Для новых хэшей лучше использовать «$2y$».
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
<constant>CRYPT_SHA256</constant> — хеш SHA-256 с шестнадцатисимвольной
|
||
солью, которая начинается с последовательности символов $5$. Если строка с солью начинается с
|
||
'rounds=<N>$', функция использует число N для обозначения
|
||
количества раундов хеширования, по аналогии с весовым параметром
|
||
в алгоритме Blowfish. По умолчанию количество раундов равно 5000,
|
||
минимально доступно 1000 и максимально 999 999 999. Любое значение
|
||
вне этого диапазона функция усечёт до ближайшего лимита.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
<constant>CRYPT_SHA512</constant> — хеш SHA-512 с шестнадцатисимвольной
|
||
солью, которая начинается с последовательности символов $6$. Если строка с солью начинается с
|
||
'rounds=<N>$', функция использует число N для обозначения
|
||
количества раундов хеширования, по аналогии с весовым параметром
|
||
в алгоритме Blowfish. По умолчанию количество раундов равно 5000,
|
||
минимально доступно 1000 и максимально 999 999 999. Любое значение
|
||
вне этого диапазона функция усечёт до ближайшего лимита.
|
||
</simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</refsect1>
|
||
|
||
<refsect1 role="parameters">
|
||
&reftitle.parameters;
|
||
<para>
|
||
<variablelist>
|
||
<varlistentry>
|
||
<term><parameter>string</parameter></term>
|
||
<listitem>
|
||
<para>
|
||
Хешируемая строка.
|
||
</para>
|
||
<caution>
|
||
<para>
|
||
С алгоритмом <constant>CRYPT_BLOWFISH</constant>,
|
||
параметр <parameter>string</parameter> обрезается до 72 байт.
|
||
</para>
|
||
</caution>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><parameter>salt</parameter></term>
|
||
<listitem>
|
||
<para>
|
||
Строка с солью, на которой функция будет основывать
|
||
хеширование. Если не укали, поведение определяется реализацией
|
||
алгоритма и может привести к неожиданным результатам.
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="returnvalues">
|
||
&reftitle.returnvalues;
|
||
<para>
|
||
Функция возвращает хешированную строку или строку короче 13 символов,
|
||
которая гарантированно отличается от соли, если возникла ошибка.
|
||
</para>
|
||
<warning>
|
||
<simpara>
|
||
При проверке паролей следует использовать функцию сравнения строк, устойчивую
|
||
к атаке по времени, для сравнения вывода функции <function>crypt</function> с известным
|
||
хешом. Для этих целей в PHP предусмотрели функцию <function>hash_equals</function>.
|
||
</simpara>
|
||
</warning>
|
||
</refsect1>
|
||
|
||
<refsect1 role="changelog">
|
||
&reftitle.changelog;
|
||
<informaltable>
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry>&Version;</entry>
|
||
<entry>&Description;</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>8.0.0</entry>
|
||
<entry>
|
||
Параметр <parameter>salt</parameter> больше необязателен.
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
</refsect1>
|
||
|
||
<refsect1 role="examples">
|
||
&reftitle.examples;
|
||
<para>
|
||
<example>
|
||
<title>Пример использования функции <function>crypt</function></title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
$user_input = 'rasmuslerdorf';
|
||
$hashed_password = '$6$rounds=1000000$NJy4rIPjpOaU$0ACEYGg/aKCY3v8O8AfyiO7CTfZQ8/W231Qfh2tRLmfdvFD6XfHk12u6hMr9cYIA4hnpjLNSTRtUwYr9km9Ij/';
|
||
|
||
// Проверка существующего хеша функции crypt() на совместимость с программным обеспечением, отличным от PHP
|
||
if (hash_equals($hashed_password, crypt($user_input, $hashed_password))) {
|
||
echo "Password verified!";
|
||
}
|
||
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="notes">
|
||
&reftitle.notes;
|
||
<note>
|
||
<simpara>
|
||
Функция расшифровки отсутствует, поскольку функция <function>crypt</function>
|
||
использует необратимый алгоритм хеширования.
|
||
</simpara>
|
||
</note>
|
||
</refsect1>
|
||
|
||
<refsect1 role="seealso">
|
||
&reftitle.seealso;
|
||
<para>
|
||
<simplelist>
|
||
<member><function>hash_equals</function></member>
|
||
<member><function>password_hash</function></member>
|
||
<member>Страница руководства Unix по вашей функции crypt</member>
|
||
</simplelist>
|
||
</para>
|
||
</refsect1>
|
||
|
||
</refentry>
|
||
<!-- Keep this comment at the end of the file
|
||
Local variables:
|
||
mode: sgml
|
||
sgml-omittag:t
|
||
sgml-shorttag:t
|
||
sgml-minimize-attributes:nil
|
||
sgml-always-quote-attributes:t
|
||
sgml-indent-step:1
|
||
sgml-indent-data:t
|
||
indent-tabs-mode:nil
|
||
sgml-parent-document:nil
|
||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||
sgml-exposed-tags:nil
|
||
sgml-local-catalogs:nil
|
||
sgml-local-ecat-files:nil
|
||
End:
|
||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||
vim: et tw=78 syn=sgml
|
||
vi: ts=1 sw=1
|
||
-->
|