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=&lt;N&gt;$', 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=&lt;N&gt;$', 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