<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.sodium.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'function.sodium-crypto-pwhash.php',
    1 => 'sodium_crypto_pwhash',
    2 => 'Deriva una clave a partir de una contrase&ntilde;a, utilizando Argon2',
  ),
  'up' => 
  array (
    0 => 'ref.sodium.php',
    1 => 'Sodium Funciones',
  ),
  'prev' => 
  array (
    0 => 'function.sodium-crypto-kx-server-session-keys.php',
    1 => 'sodium_crypto_kx_server_session_keys',
  ),
  'next' => 
  array (
    0 => 'function.sodium-crypto-pwhash-scryptsalsa208sha256.php',
    1 => 'sodium_crypto_pwhash_scryptsalsa208sha256',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/sodium/functions/sodium-crypto-pwhash.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.sodium-crypto-pwhash" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">sodium_crypto_pwhash</h1>
  <p class="verinfo">(PHP 7 &gt;= 7.2.0, PHP 8)</p><p class="refpurpose"><span class="refname">sodium_crypto_pwhash</span> &mdash; <span class="dc-title">Deriva una clave a partir de una contraseña, utilizando Argon2</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.sodium-crypto-pwhash-description">
  <h3 class="title">Descripción</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>sodium_crypto_pwhash</strong></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$length</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<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">$password</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$salt</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$opslimit</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$memlimit</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$algo</code><span class="initializer"> = <strong><code><a href="sodium.constants.php#constant.sodium-crypto-pwhash-alg-default">SODIUM_CRYPTO_PWHASH_ALG_DEFAULT</a></code></strong></span></span><br>): <span class="type"><a href="language.types.string.php" class="type string">string</a></span></div>

  <p class="simpara">
   Esta función proporciona acceso de bajo nivel a la función de derivación de clave crypto_pwhash de libsodium. A menos que haya una razón específica para utilizar esta función, se deben utilizar las funciones <span class="function"><a href="function.sodium-crypto-pwhash-str.php" class="function">sodium_crypto_pwhash_str()</a></span> o <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span> en su lugar.
  </p>
  <p class="simpara">
   Una razón común para utilizar esta función es derivar las semillas para las claves criptográficas a partir de una contraseña y un salt, y luego utilizar estas semillas para generar las claves reales necesarias para un uso específico (por ejemplo, <span class="function"><a href="function.sodium-crypto-sign-detached.php" class="function">sodium_crypto_sign_detached()</a></span>).
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.sodium-crypto-pwhash-parameters">
  <h3 class="title">Parámetros</h3>
  <dl>
   
    <dt><code class="parameter">length</code></dt>
    <dd>
     <span class="simpara">
      <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>; La longitud del hash de la contraseña a generar, en bytes.
     </span>
    </dd>
   
   
    <dt><code class="parameter">password</code></dt>
    <dd>
     <span class="simpara">
      <span class="type"><a href="language.types.string.php" class="type string">string</a></span>; La contraseña para la cual generar un hash.
     </span>
    </dd>
   
   
    <dt><code class="parameter">salt</code></dt>
    <dd>
     <span class="simpara">
      Un salt para añadir a la contraseña antes del hash. El salt debe ser impredecible, idealmente generado a partir de una buena fuente de números aleatorios como <span class="function"><a href="function.random-bytes.php" class="function">random_bytes()</a></span>, y tener una longitud de al menos <strong><code><a href="sodium.constants.php#constant.sodium-crypto-pwhash-saltbytes">SODIUM_CRYPTO_PWHASH_SALTBYTES</a></code></strong> bytes.
     </span>
    </dd>
   
   
    <dt><code class="parameter">opslimit</code></dt>
    <dd>
     <span class="simpara">
      Representa una cantidad máxima de cálculos a realizar. Aumentar este número hará que la función requiera más ciclos de CPU para calcular una clave. Existen constantes disponibles para definir el límite de operaciones a valores adecuados según el uso previsto, en orden de fuerza: <strong><code><a href="sodium.constants.php#constant.sodium-crypto-pwhash-opslimit-interactive">SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE</a></code></strong>, <strong><code><a href="sodium.constants.php#constant.sodium-crypto-pwhash-opslimit-moderate">SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE</a></code></strong> y <strong><code><a href="sodium.constants.php#constant.sodium-crypto-pwhash-opslimit-sensitive">SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE</a></code></strong>.
     </span>
    </dd>
   
   
    <dt><code class="parameter">memlimit</code></dt>
    <dd>
     <span class="simpara">
      La cantidad máxima de RAM que la función utilizará, en bytes. Existen constantes para ayudar a elegir un valor adecuado, en orden de tamaño: <strong><code><a href="sodium.constants.php#constant.sodium-crypto-pwhash-memlimit-interactive">SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE</a></code></strong>, <strong><code><a href="sodium.constants.php#constant.sodium-crypto-pwhash-memlimit-moderate">SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE</a></code></strong> y <strong><code><a href="sodium.constants.php#constant.sodium-crypto-pwhash-memlimit-sensitive">SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE</a></code></strong>. Típicamente, estos valores deberían asociarse con los valores opslimit correspondientes.
     </span>
    </dd>
   
   
    <dt><code class="parameter">algo</code></dt>
    <dd>
     <span class="simpara">
      <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> Un número que indica el algoritmo de hash a utilizar. Por defecto <strong><code><a href="sodium.constants.php#constant.sodium-crypto-pwhash-alg-default">SODIUM_CRYPTO_PWHASH_ALG_DEFAULT</a></code></strong> (el algoritmo actualmente recomendado, que puede cambiar de una versión de libsodium a otra), o explícitamente utilizando <strong><code><a href="sodium.constants.php#constant.sodium-crypto-pwhash-alg-argon2id13">SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13</a></code></strong>, representando el algoritmo Argon2id versión 1.3.
     </span>
    </dd>
   
  </dl>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.sodium-crypto-pwhash-returnvalues">
  <h3 class="title">Valores devueltos</h3>
  <p class="simpara">
   Devuelve la clave derivada. El valor de retorno es una cadena binaria del hash, no una representación codificada en ASCII, y no contiene información adicional sobre los parámetros utilizados para crear el hash, por lo que se deberá conservar esta información si alguna vez se necesita verificar la contraseña en el futuro. Utilice <span class="function"><a href="function.sodium-crypto-pwhash-str.php" class="function">sodium_crypto_pwhash_str()</a></span> para evitar tener que hacer todo esto.
  </p>
 </div>

 <div class="refsect1 examples" id="refsect1-function.sodium-crypto-pwhash-examples">
  <h3 class="title">Ejemplos</h3>
  <div class="example" id="example-1">
   <p><strong>Ejemplo #1 Ejemplo de <span class="function"><strong>sodium_crypto_pwhash()</strong></span></strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//Requerido para conservar el salt si alguna vez necesitamos verificar esta contraseña<br /></span><span style="color: #0000BB">$salt </span><span style="color: #007700">= </span><span style="color: #0000BB">random_bytes</span><span style="color: #007700">(</span><span style="color: #0000BB">SODIUM_CRYPTO_PWHASH_SALTBYTES</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">//Utilizar bin2hex para mantener la salida legible<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">bin2hex</span><span style="color: #007700">(<br />    </span><span style="color: #0000BB">sodium_crypto_pwhash</span><span style="color: #007700">(<br />        </span><span style="color: #0000BB">16</span><span style="color: #007700">, </span><span style="color: #FF8000">// == 128 bits<br />        </span><span style="color: #DD0000">'password'</span><span style="color: #007700">,<br />        </span><span style="color: #0000BB">$salt</span><span style="color: #007700">,<br />        </span><span style="color: #0000BB">SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE</span><span style="color: #007700">,<br />        </span><span style="color: #0000BB">SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE</span><span style="color: #007700">,<br />        </span><span style="color: #0000BB">SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13<br />    </span><span style="color: #007700">)<br />);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Resultado del ejemplo anterior es similar a:</p></div>
   <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">a18f346ba57992eb7e4ae6abf3fd30ee</pre>
</div>
   </div>
  </div>
 </div>


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