<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.strings.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'function.crypt.php',
    1 => 'crypt',
    2 => 'Hash de un solo sentido (indescifrable)',
  ),
  'up' => 
  array (
    0 => 'ref.strings.php',
    1 => 'Funciones de strings',
  ),
  'prev' => 
  array (
    0 => 'function.crc32.php',
    1 => 'crc32',
  ),
  'next' => 
  array (
    0 => 'function.echo.php',
    1 => 'echo',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/strings/functions/crypt.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.crypt" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">crypt</h1>
  <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">crypt</span> &mdash; <span class="dc-title">Hash de un solo sentido (indescifrable)</span></p>

 </div>

 <div id="function.crypt-refsynopsisdiv">
  <div class="warning"><strong class="warning">Advertencia</strong><p class="simpara">
 Esta función no es capaz de manejar strings binarios !
</p></div>
 </div>

 <div class="refsect1 description" id="refsect1-function.crypt-description">
  <h3 class="title">Descripción</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>crypt</strong></span>(<span class="methodparam"><span class="attribute"><a href="class.sensitiveparameter.php">#[\SensitiveParameter]</a> </span><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$string</code></span>, <span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$salt</code></span>): <span class="type"><a href="language.types.string.php" class="type string">string</a></span></div>

  <p class="para rdfs-comment">
   <span class="function"><strong>crypt()</strong></span> devolverá una cadena con hash utilizando el algoritmo estándar de Unix basado en <abbr class="abbrev">DES</abbr>, o un algoritmo alternativo. La función <span class="function"><a href="function.password-verify.php" class="function">password_verify()</a></span> es compatible con la función <span class="function"><strong>crypt()</strong></span>. Así, una contraseña con hash de la función <span class="function"><strong>crypt()</strong></span> puede ser utilizada con la función <span class="function"><a href="function.password-verify.php" class="function">password_verify()</a></span>.
  </p>
  <p class="para">
   Anterior a PHP 8.0.0, el parámetro <code class="parameter">salt</code> era opcional. Sin embargo, <span class="function"><strong>crypt()</strong></span> crea un hash débil sin el <code class="parameter">salt</code>, y genera un error <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> sin este. Asegúrese de especificar un salt lo suficientemente fuerte para una mejor seguridad.
  </p>
  <p class="para">
   <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span> utiliza un hash fuerte, genera un salt fuerte, y aplica todo automáticamente. <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span> es solo un gestor de <span class="function"><strong>crypt()</strong></span> y es compatible con contraseñas con hash existentes. Se recomienda encarecidamente el uso de la función <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span>.
  </p>
  <p class="para">
   El tipo de hash es activado por el argumento <code class="parameter">salt</code>. Si no se proporciona ningún <code class="parameter">salt</code>, PHP generará dos caracteres (DES), a menos que el sistema predeterminado sea MD5, en cuyo caso se generará un <code class="parameter">salt</code> compatible con MD5. PHP define una constante llamada <strong><code><a href="string.constants.php#constant.crypt-salt-length">CRYPT_SALT_LENGTH</a></code></strong> que permite conocer la longitud del <code class="parameter">salt</code> disponible para el sistema de hash utilizado.
  </p>
  <p class="para">
   <span class="function"><strong>crypt()</strong></span>, cuando se utiliza con el cifrado estándar DES, devuelve el <code class="parameter">salt</code> en los dos primeros caracteres de la cadena devuelta. Solo utiliza los primeros 8 caracteres de <code class="parameter">string</code>, lo que hace que todas las cadenas más largas, que tienen los mismos primeros 8 octetos, devuelvan el mismo resultado (siempre que el <code class="parameter">salt</code> sea siempre el mismo).
  </p>
  <p class="simpara">
   Los siguientes tipos de hash son soportados:
  </p>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="string.constants.php#constant.crypt-std-des">CRYPT_STD_DES</a></code></strong>: cifrado DES estándar de 2 caracteres desde la clase de caracteres &quot;./0-9A-Za-z&quot;. El uso de caracteres inválidos en el salt hará fallar la función crypt().
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="string.constants.php#constant.crypt-ext-des">CRYPT_EXT_DES</a></code></strong>: Hash DES extendido. El &quot;salt&quot; será una cadena de 9 caracteres compuesta de un guion bajo, seguido de 4 caracteres del contador de iteración y luego 4 caracteres del &quot;salt&quot;. Cada una de estas cadenas de 4 caracteres codifica 24 bits, el carácter menos significativo primero. Los valores de <code class="literal">0</code> a <code class="literal">63</code> serán codificados como <code class="literal">./0-9A-Za-z</code>. El uso de caracteres inválidos en el salt hará fallar la función crypt().
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="string.constants.php#constant.crypt-md5">CRYPT_MD5</a></code></strong>: hash MD5 de 12 caracteres que comienza con <code class="literal">$1$</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="string.constants.php#constant.crypt-blowfish">CRYPT_BLOWFISH</a></code></strong>: hash Blowfish cuyo salt está compuesto de la siguiente manera: &quot;$2a$&quot;, &quot;$2x$&quot; o &quot;$2y$&quot;, un parámetro de 2 dígitos, <code class="literal">$</code>, y 22 caracteres del alfabeto &quot;./0-9A-Za-z&quot;. El uso de caracteres fuera de esta clase en el salt hará que la función crypt() devuelva una cadena vacía (de longitud 0). El parámetro de 2 dígitos es el logaritmo base-2 del contador de iteración para el algoritmo de hash basado en Blowfish subyacente y debe estar en el rango 04-31. De manera similar, si se utiliza un valor fuera de este rango, la función crypt() fallará.

     Los hashes &quot;$2x$&quot; son potencialmente débiles; los hashes &quot;$2a$&quot; son compatibles y mitigan esta debilidad. Para nuevos hashes, &quot;$2y$&quot; debería ser utilizado.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="string.constants.php#constant.crypt-sha256">CRYPT_SHA256</a></code></strong> - Hash SHA-256 cuyo salt está compuesto de 16 caracteres prefijados por <code class="literal">$5$</code>. Si el salt comienza con <code class="literal">&#039;rounds=&lt;N&gt;$&#039;</code>, el valor numérico de N será utilizado para indicar cuántas veces el bucle de hash debe ser ejecutado, algo similar al parámetro en el algoritmo Blowfish. El valor predeterminado de <code class="literal">rounds</code> es 5000, el mínimo puede ser 1000 y el máximo, 999,999,999. Cualquier otra selección de N fuera de este rango será truncada al límite más cercano de los 2.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="string.constants.php#constant.crypt-sha512">CRYPT_SHA512</a></code></strong> - Hash SHA-512 cuyo salt está compuesto de 16 caracteres prefijados por <code class="literal">$6$</code>. Si el salt comienza con <code class="literal">&#039;rounds=&lt;N&gt;$&#039;</code>, el valor numérico de N será utilizado para indicar cuántas veces el bucle de hash debe ser ejecutado, algo similar al parámetro en el algoritmo Blowfish. El valor predeterminado de <code class="literal">rounds</code> es 5000, el mínimo puede ser 1000 y el máximo, 999,999,999. Cualquier otra selección de N fuera de este rango será truncada al límite más cercano de los 2.
    </span>
   </li>
  </ul>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.crypt-parameters">
  <h3 class="title">Parámetros</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">string</code></dt>
     <dd>
      <p class="para">
       La cadena a hashear.
      </p>
      <div class="caution"><strong class="caution">Precaución</strong>
       <p class="para">
        Si se utiliza el algoritmo <strong><code><a href="string.constants.php#constant.crypt-blowfish">CRYPT_BLOWFISH</a></code></strong>, el resultado del parámetro <code class="parameter">string</code> será truncado a una longitud máxima de 72 octetos.
       </p>
      </div>
     </dd>
    
    
     <dt><code class="parameter">salt</code></dt>
     <dd>
      <p class="para">
       Si el argumento <code class="parameter">salt</code> no es proporcionado, el comportamiento está definido por la implementación del algoritmo y puede provocar resultados inesperados.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.crypt-returnvalues">
  <h3 class="title">Valores devueltos</h3>
  <p class="para">
   Devuelve la cadena con hash o una cadena que será inferior a 13 caracteres y que está garantizada para diferir del salt en caso de error.
  </p>
  <div class="warning"><strong class="warning">Advertencia</strong>
   <p class="simpara">
    Al validar contraseñas, debe utilizarse una función de comparación de cadenas que no sea vulnerable a ataques temporales para comparar la salida de la función <span class="function"><strong>crypt()</strong></span> con el hash conocido previamente. PHP proporciona <span class="function"><a href="function.hash-equals.php" class="function">hash_equals()</a></span> para esto.
   </p>
  </div>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.crypt-changelog">
  <h3 class="title">Historial de cambios</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Versión</th>
      <th>Descripción</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>8.0.0</td>
      <td>
       El <code class="parameter">salt</code> ya no es opcional.
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>


 <div class="refsect1 examples" id="refsect1-function.crypt-examples">
  <h3 class="title">Ejemplos</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 Ejemplo con <span class="function"><strong>crypt()</strong></span></strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$user_input </span><span style="color: #007700">= </span><span style="color: #DD0000">'rasmuslerdorf'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$hashed_password </span><span style="color: #007700">= </span><span style="color: #DD0000">'$6$rounds=1000000$NJy4rIPjpOaU$0ACEYGg/aKCY3v8O8AfyiO7CTfZQ8/W231Qfh2tRLmfdvFD6XfHk12u6hMr9cYIA4hnpjLNSTRtUwYr9km9Ij/'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Validar un hash crypt() existente de una manera compatible con software no-PHP<br /></span><span style="color: #007700">if (</span><span style="color: #0000BB">hash_equals</span><span style="color: #007700">(</span><span style="color: #0000BB">$hashed_password</span><span style="color: #007700">, </span><span style="color: #0000BB">crypt</span><span style="color: #007700">(</span><span style="color: #0000BB">$user_input</span><span style="color: #007700">, </span><span style="color: #0000BB">$hashed_password</span><span style="color: #007700">))) {<br />   echo </span><span style="color: #DD0000">"¡Contraseña correcta!"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
 </div>


 <div class="refsect1 notes" id="refsect1-function.crypt-notes">
  <h3 class="title">Notas</h3>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    No existe una función de descifrado, ya que la función <span class="function"><strong>crypt()</strong></span> utiliza un algoritmo de un solo sentido (inyección).
   </span>
  </p></blockquote>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.crypt-seealso">
  <h3 class="title">Ver también</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.hash-equals.php" class="function" rel="rdfs-seeAlso">hash_equals()</a> - Comparaci&oacute;n de strings resistente a ataques temporales</span></li>
    <li><span class="function"><a href="function.password-hash.php" class="function" rel="rdfs-seeAlso">password_hash()</a> - Crea una clave de hash para una contrase&ntilde;a</span></li>
    <li>La página del manual Unix de la función crypt para más información</li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>