svn: /phpdoc/bg/trunk/reference/strings/functions/ crypt.xml
[email protected] (Stanislav Yordanov) Sat, 26 Mar 2016 22:27:59 +0000
| Newsgroups | php.doc.bg |
|---|---|
| Message-ID | <[email protected]> |
stanprog Sat, 26 Mar 2016 22:27:59 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=338828
Log:
sync to EN
Changed paths:
U phpdoc/bg/trunk/reference/strings/functions/crypt.xml
svn-diffs-338828.txt
(text/x-diff, 20.5 KB)
Modified: phpdoc/bg/trunk/reference/strings/functions/crypt.xml
===================================================================
--- phpdoc/bg/trunk/reference/strings/functions/crypt.xml 2016-03-26 22:23:44 UTC (rev 338827)
+++ phpdoc/bg/trunk/reference/strings/functions/crypt.xml 2016-03-26 22:27:59 UTC (rev 338828)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- $Revision$ -->
-<!-- EN-Revision: n/a Maintainer: stanprog Status: ready -->
-<refentry xml:id="function.crypt" xmlns="http://docbook.org/ns/docbook">
+<!-- $Revision$ --> <!-- До ред 71. включително -->
+<!-- EN-Revision: 336939 Maintainer: stanprog Status: ready -->
+<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>
@@ -16,32 +16,31 @@
</methodsynopsis>
<para>
<function>crypt</function> връща низ, криптиран на базата на
- стандарния Unix <abbrev>DES</abbrev> алгоритъм за криптиране или
+ стандартния Unix <abbrev>DES</abbrev> алгоритъм за криптиране или
на базата на други алгоритми достъпни в системата.
</para>
<para>
+ Параметърът <parameter>salt</parameter> е незадължителен. Въпреки това, функция <function>crypt</function> създава слаба парола, ако той не е зададен. PHP 5.6 и по-нови версии генерират съобщение от ниво E_NOTICE, ако той не е зададен. Уверете се, че сте указали достатъчно силен salt, за по-добра сигурност.
+ </para>
+ <para>
+ Функция <function>password_hash</function> използва силен хеш, генерира силен salt и прилага подходящи round-и автоматично. <function>password_hash</function> представлява проста опаковка на <function>crypt</function> и е съвместима със съществуващите хешове на пароли. По тази причина употребата на функция <function>password_hash</function> е силно препоръчителна.
+ </para>
+ <para>
Някои операционни системи поддържат повече от един вид криптиране.
- Всъщност, понякога стандартното криптиране базирано на DES алгоритъма
- се заменя с криптиране базирано на MD5 алгоритъма.
- Типът на криптиране зависи от salt параметъра.
- По време на инсталацията, PHP определя възможностите на функцията
- crypt и приема ключове и за други типове криптирания.
- Ако не е зададен ключ, PHP ще генерира стандартен двузнаков salt
- по подразбиране, освен ако текущият тип на криптиране на системата
- е MD5. В този случай ще се генерира случаен MD5-съвместим salt.
- В PHP е установена константата CRYPT_SALT_LENGTH, която указва
- дали обикновен двузнаков salt може да се използва във вашата система
- или е приложим по-дългият дванадесет знаков salt.
+ Всъщност, понякога стандартното криптиране базирано на DES алгоритъма се заменя с
+ криптиране базирано на MD5 алгоритъма. Типът на криптиране зависи от salt параметъра.
+ До версия 5.3, PHP определя достъпните алгоритми по време на инсталацията
+ на базата на системната функция crypt. Ако не е осигурен salt, PHP ще
+ генерира автоматично или стандартен двузнаков (DES) salt, или дванадесетзнаков
+ (MD5), в зависимост от наличността на MD5 crypt(). PHP установява
+ константата <constant>CRYPT_SALT_LENGTH</constant>, която указва
+ най-дългия валиден salt, позволен от наличните хешове.
</para>
<para>
- Ако използвате предоставения salt, трябва да знаете, че той се
- генерира само веднъж. Ако извиквате тази функция многократно,
- това може да повлияе на изхода и на сигурността.
- Функцията <function>crypt</function>, която използва стандартно
- DES криптиране връща salt-а като първите два символа от изхода.
- Също така, използва само първите осем знака от параметъра
- <parameter>str</parameter>, така че, по-дълги низове, започващи
- със същите осем знака ще генерират същият резултат
+ Стандартната функция <function>crypt</function> базирана на DES връща
+ salt като първи два знака от изхода. Също така, използва
+ само първите осем знака от параметъра <parameter>str</parameter>, така че, по-дълги низове,
+ започващи със същите осем знака ще генерират същият резултат
(ако се използва същият salt).
</para>
<simpara>
@@ -53,28 +52,71 @@
<listitem>
<simpara>
<constant>CRYPT_STD_DES</constant> - Стандартно криптиране базирано на DES със двузнаков salt
+ от азбуката "./0-9A-Za-z". Употребата на невалидни знаци в salt_а ще предизвика
+ отказ от работа на crypt().
</simpara>
</listitem>
<listitem>
<simpara>
- <constant>CRYPT_EXT_DES</constant> - Разширено криптиране базирано на DES със девет знаков salt
+ <constant>CRYPT_EXT_DES</constant> - Разширено хеширане базирано на DES. Salt-a e
+ 9-знаков низ, състоящ се от подчертаващо тире, последвано от 4 байта от броя на итерацията и
+ 5 байта salt. Тези знаци са кодирани могат да се извеждат, по 6 бита на знак, като най-незначителния
+ знак е първи. Стойностите от 0 до 63 са кодирани във вид "./0-9A-Za-z". Употребата на невалидни
+ знаци в salt-а ще доведе до отказ от работа на crypt().
</simpara>
</listitem>
<listitem>
<simpara>
- <constant>CRYPT_MD5</constant> - MD5 криптиране със дванадесет знаков salt започващ с $1$
+ <constant>CRYPT_MD5</constant> - MD5 хеширане със дванадесет знаков salt започващ с
+ $1$
</simpara>
</listitem>
<listitem>
<simpara>
- <constant>CRYPT_BLOWFISH</constant> - Blowfish криптиране със шестнадесет знаков salt
- започващ с $2$ или $2a$
+ <constant>CRYPT_BLOWFISH</constant> - Blowfish криптиране със
+ следният salt: "$2a$", "$2x$" или "$2y$", двуцифрен параметър за теглото (cost), и
+ 22 знака измежду "./0-9A-Za-z". Използването на други знаци за salt ще
+ предизвика генериране низ с нулева дължина от страна на функция crypt().
+ Двуцифровия параметър на теглото представлява двоичен логаритъм на
+ брояча на итерации на базисния хеширащ алгоритъм базиран на Blowfish и трябва да бъде
+ в обхвата 04-31, като стойност извън този обхват ще доведат до отказ на функция crypt().
+ Версиите на PHP до 5.3.7 поддържат само представка "$2a$" за salt: В PHP
+ 5.3.7 са добавени нови представки за коригиране на дупките в сигурността в
+ реализацията на Blowfish. За по-подробна информация можете да се обърнете към
+ <link xlink:href="&url.crypt.blowfish;">този документ</link>. Казано накратко -
+ разработчиците са длъжни да ползват "$2y$" вместо "$2a$"
+ от PHP 5.3.7.
</simpara>
</listitem>
+ <listitem>
+ <simpara>
+ <constant>CRYPT_SHA256</constant> - SHA-256 hash with a sixteen character salt
+ prefixed with $5$. If the salt string starts with 'rounds=<N>$', the numeric value of N
+ is used to indicate how many times the hashing loop should be executed, much like the cost
+ parameter on Blowfish. The default number of rounds is 5000, there is a minimum of
+ 1000 and a maximum of 999,999,999. Any selection of N outside this range will be truncated to
+ the nearest limit.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ <constant>CRYPT_SHA512</constant> - SHA-512 hash with a sixteen character salt
+ prefixed with $6$. If the salt string starts with 'rounds=<N>$', the numeric value of N
+ is used to indicate how many times the hashing loop should be executed, much like the cost
+ parameter on Blowfish. The default number of rounds is 5000, there is a minimum of
+ 1000 and a maximum of 999,999,999. Any selection of N outside this range will be truncated to
+ the nearest limit.
+ </simpara>
+ </listitem>
</itemizedlist>
+ <note>
+ <para>
+ От PHP 5.3.0, PHP има собствена реализация и ще я използва,
+ ако системата не поддържа един или повече от алгоритмите.
+ </para>
+ </note>
</refsect1>
-
-
+
<refsect1 role="parameters">
&reftitle.parameters;
<para>
@@ -85,6 +127,13 @@
<para>
Низът, който ще се криптира.
</para>
+ <caution>
+ <para>
+ При използването на алгоритъма <constant>CRYPT_BLOWFISH</constant>,
+ параметъра <parameter>str</parameter> ще бъде отрязан
+ до дължина максимум 72 знака.
+ </para>
+ </caution>
</listitem>
</varlistentry>
<varlistentry>
@@ -92,52 +141,128 @@
<listitem>
<para>
Незадължителен salt низ, на базата на който се извършва криптирането.
- Ако не е зададен, такъв ще бъде генериран по случаен начин от
- PHP при всяко извикване на тази функция.
+ Ако не е зададен от, поведението на функцията ще зависи от реализацията на алгоритъма и
+ може да доведе до неочаквани резултати.
</para>
- <para>
- Важно е да се знае, че ако е зададен salt низа, то ключа се генерира
- само веднъж. При повторното извикване на функцията това може да повлияе
- на резултата от изпълнението и на сигурността.
- </para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
-
+
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
- Връща криптиран низ.
+ Връща хеширания низ или низ, който е по-малък от 13 знака,
+ гарантирано различен от salt в случай на грешка.
</para>
+ <warning>
+ <simpara>
+ При валидация на пароли, за сравняване на изхода от <function>crypt</function>
+ с известен хеш, ще бъде използвана функция за сравняване на низове,
+ коятo не е уязвима на атаки по време. В PHP 5.6 и по-нови версии
+ за тази цел се ползва функция <function>hash_equals</function>.
+ </simpara>
+ </warning>
</refsect1>
-
+
+ <refsect1 role="changelog">
+ &reftitle.changelog;
+ <para>
+ <informaltable>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>&Version;</entry>
+ <entry>&Description;</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>5.6.5</entry>
+ <entry>
+ Ако като параметър <parameter>salt</parameter> е предадена некоректната
+ стойност "*0", то тогава ще върне "*1", съгласно
+ другите криптографски реализации. До тази версия, PHP 5.6
+ некоректно ще върне DES хеш.
+ </entry>
+ </row>
+ <row>
+ <entry>5.6.0</entry>
+ <entry>
+ Ако е пропуснат параметърът <parameter>salt</parameter>, ще се генерира предупреждение.
+ </entry>
+ </row>
+ <row>
+ <entry>5.5.21</entry>
+ <entry>
+ Ако като параметър <parameter>salt</parameter> е предадена некоректната
+ стойност "*0", то тогава ще върне "*1", съгласно
+ другите криптографски реализации. До тази версия, PHP 5.5
+ некоректно ще върне DES хеш.
+ </entry>
+ </row>
+ <row>
+ <entry>5.3.7</entry>
+ <entry>
+ Добавени са Blowfish режимите <literal>$2x$</literal> и <literal>$2y$</literal>,
+ с цел предотвратяване евентуални high-bit атаки.
+ </entry>
+ </row>
+ <row>
+ <entry>5.3.2</entry>
+ <entry>
+ Добавени са криптиранията SHA-256 и SHA-512 базирани на
+ <link xlink:href="&url.crypt.sha;">реализацията</link> на Улрих Дрепър.
+ </entry>
+ </row>
+ <row>
+ <entry>5.3.2</entry>
+ <entry>
+ Коригирано е поведението на Blowfish при некоректни закръгляния да
+ връща низ за грешка ("*0" или "*1") , вместо да използва DES.
+ </entry>
+ </row>
+ <row>
+ <entry>5.3.0</entry>
+ <entry>
+ PHP вече използва собствена реализация на MD5, стандартния DES,
+ разширения DES и Blowfish алгоритми, които ще бъдат използвани
+ в случай, че не се поддържат от системата.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </para>
+ </refsect1>
+
<refsect1 role="examples">
&reftitle.examples;
<para>
-
- <example>
- <title>Примери за <function>crypt</function></title>
- <programlisting role="php">
+ <example>
+ <title>Примери за <function>crypt</function></title>
+ <programlisting role="php">
<![CDATA[
<?php
-$password = crypt('mypassword'); // нека salt параметъра се генерира автоматично
+$hashed_password = crypt('mypassword'); // нека salt параметъра се генерира автоматично
/* Трябва да предадете целия резултат от crypt() като salt при сравняване
на парола, за да избегнете проблеми при употребата на различни алгоритми
за хеширане. (Както е казано по-горе, стандартното базирано на DES хеширане
използва двузнаков salt, но базираното на MD5 алгоритъма хеширане използва 12.) */
-if (crypt($user_input, $password) == $password) {
+if (hash_equals($hashed_password, crypt($user_input, $hashed_password))) {
echo "Password verified!";
}
?>
]]>
- </programlisting>
- </example>
- <example>
- <title>Употреба на <function>crypt</function> с htpasswd</title>
- <programlisting role="php">
+ </programlisting>
+ </example>
+ </para>
+ <para>
+ <example>
+ <title>Употреба на <function>crypt</function> с htpasswd</title>
+ <programlisting role="php">
<![CDATA[
<?php
// Установяване на паролата
@@ -147,13 +272,18 @@
$hash = crypt($password);
?>
]]>
- </programlisting>
- </example>
- <example>
- <title>Употреба на <function>crypt</function> с различни типове криптиране</title>
- <programlisting role="php">
+ </programlisting>
+ </example>
+ </para>
+ <para>
+ <example>
+ <title>Употреба на <function>crypt</function> с различни типове криптиране</title>
+ <programlisting role="php">
<![CDATA[
<?php
+/* Тези salt стойности са примерни и не трябва да се използват директно във вашия код.
+ Трябва да генерирате различен, правилно форматиран salt за всяка парола.rd.
+*/
if (CRYPT_STD_DES == 1) {
echo 'Standard DES: ' . crypt('rasmuslerdorf', 'rl') . "\n";
}
@@ -167,24 +297,34 @@
}
if (CRYPT_BLOWFISH == 1) {
- echo 'Blowfish: ' . crypt('rasmuslerdorf', '$2a$07$rasmuslerd...........$') . "\n";
+ echo 'Blowfish: ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "\n";
}
+
+if (CRYPT_SHA256 == 1) {
+ echo 'SHA-256: ' . crypt('rasmuslerdorf', '$5$rounds=5000$usesomesillystringforsalt$') . "\n";
+}
+
+if (CRYPT_SHA512 == 1) {
+ echo 'SHA-512: ' . crypt('rasmuslerdorf', '$6$rounds=5000$usesomesillystringforsalt$') . "\n";
+}
?>
]]>
- </programlisting>
+ </programlisting>
&example.outputs.similar;
- <screen>
+ <screen>
<![CDATA[
Standard DES: rl.3StKT.4T8M
Extended DES: _J9..rasmBYk8r9AiWNc
MD5: $1$rasmusle$rISCgZzpwk3UhDidwXvin0
-Blowfish: $2a$07$rasmuslerd............nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra
+Blowfish: $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi
+SHA-256: $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6
+SHA-512: $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
]]>
- </screen>
- </example>
- </para>
-</refsect1>
-
+ </screen>
+ </example>
+ </para>
+ </refsect1>
+
<refsect1 role="notes">
&reftitle.notes;
<note>
@@ -194,18 +334,20 @@
</simpara>
</note>
</refsect1>
-
+
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
+ <member><function>hash_equals</function></member>
+ <member><function>password_hash</function></member>
<member><function>md5</function></member>
<member>Разширението <link linkend="ref.mcrypt">Mcrypt</link></member>
<member>Страницата от ръководството на Unix за функцията crypt</member>
</simplelist>
</para>
</refsect1>
-
+
</refentry>
<!-- Keep this comment at the end of the file