mirror of
https://github.com/php/doc-es.git
synced 2026-03-26 16:32:13 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@337034 c90b9560-bf6c-de11-be94-00142212c4b1
373 lines
14 KiB
XML
373 lines
14 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: a706ea6af5e3015603a3ecc0264b846af0ca7a7a Maintainer: seros Status: ready -->
|
|
<!-- Reviewed: no Maintainer: seros -->
|
|
<refentry xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://docbook.org/ns/docbook" xml:id="function.crypt">
|
|
<refnamediv>
|
|
<refname>crypt</refname>
|
|
<refpurpose>Hash de cadenas de un sólo sentido</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsect1 role="description">
|
|
&reftitle.description;
|
|
<methodsynopsis>
|
|
<type>string</type><methodname>crypt</methodname>
|
|
<methodparam><type>string</type><parameter>str</parameter></methodparam>
|
|
<methodparam choice="opt"><type>string</type><parameter>salt</parameter></methodparam>
|
|
</methodsynopsis>
|
|
<para>
|
|
<function>crypt</function> devolverá el hash de un string utilizando el
|
|
algoritmo estándar basado en <abbrev>DES</abbrev> de Unix o
|
|
algoritmos alternativos que puedan estar disponibles en el sistema.
|
|
</para>
|
|
<para>
|
|
El parámetro <parameter>salt</parameter> es opcional. Sin embargo, <function>crypt</function> crea una contraseña débil sin <parameter>salt</parameter>. PHP 5.6 o posterior emiten un error de nivel E_NOTICE sin él. Asegúrese de especificar una sal lo suficientemente fuerte para mayor seguridad.
|
|
</para>
|
|
<para>
|
|
<function>password_hash</function> utiliza un hash fuerte, genera una sal fuerte, y aplica los redondeos necesarios automáticamente. <function>password_hash</function> es una envoltura simple de <function>crypt</function> compatible con los hash de contraseñas existentes. Se aconseja el uso de <function>password_hash</function>.
|
|
</para>
|
|
<para>
|
|
Algunos sistemas operativos soportan más de un tipo de hash. De
|
|
hecho, a veces el algoritmo estándar basado en DES es sustituído por un
|
|
algoritmo basado en MD5. El tipo de hash se dispara mediante el argumento salt.
|
|
Antes de la versión 5.3, PHP determinaba los algoritmos disponibles durante la instalación,
|
|
basándose en la función crypt() del sistema. Si no se proporciona una sal, PHP
|
|
autogenerará o una sal estándar de dos caracteres (DES), o una de doce
|
|
caracteres (MD5), dependiendo de la disponibilidad de la función crypt() de MD5. PHP establece una
|
|
constante llamada <constant>CRYPT_SALT_LENGTH</constant> la cual indica la
|
|
sal de mayor longitud permitida por los hash disponibles.
|
|
</para>
|
|
<para>
|
|
La función <function>crypt</function> estándar basada en DES devuelve la
|
|
sal como los primeros dos caracteres de la salida. También utiliza solamente los
|
|
primeros ocho caracteres de <parameter>str</parameter>, por lo que cadenas más largas
|
|
que empiecen con los mismos ocho caracteres, generarán el mismo resultado
|
|
(cuando se utiliza la misma sal).
|
|
</para>
|
|
<simpara>
|
|
En sistemas donde la función crypt() soporta múltiples
|
|
tipos de hash, las siguientes contantes se establecen en 0 o 1,
|
|
dependiendo de que si el tipo dado está disponible:
|
|
</simpara>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
<constant>CRYPT_STD_DES</constant> - Hash estándar basado en DES con un salt de dos caracteres
|
|
del alfabeto "./0-9A-Za-z". Utilizar caracteres no válidos en el salt causará que crypt()
|
|
falle.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<constant>CRYPT_EXT_DES</constant> - Hash extendido basado en DES. El "salt" es un
|
|
string de 9 caracteres que consiste en un guión bajo seguido de 4 bytes del conteo de iteraciones
|
|
y 4 bytes del salt. Estos están codificados como caracteres imprimibles, 6 bits por caracter, por lo menos,
|
|
el carácter significativo primero. Los valores del 0 al 63 son codificados como "./0-9A-Za-z". Utilizar caracteres
|
|
no válidos en el salt causará que crypt() falle.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<constant>CRYPT_MD5</constant> - Hash MD5 con un salt de doce caracteres comenzando con
|
|
$1$
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<constant>CRYPT_BLOWFISH</constant> - Hash con Blowfish con un salt como
|
|
sigue: "$2a$", "$2x$" o "$2y$", un parámetro de coste de dos dígitos, "$", y
|
|
22 caracteres del alfabeto "./0-9A-Za-z". Utilizar caracteres fuera de este
|
|
rango en el salt causará que crypt() devuelva una cadena de longitud cero.
|
|
El parámetro de coste de dos dígitos es el logaritmo en base 2 de la cuenta de la
|
|
iteración del algoritmo hach basado en Blowfish subyacente, y debe estar
|
|
en el rango 04-31; los valores fuera de este rango causarán que crypt() falle.
|
|
Las versiones de PHP anteriores a 5.3.7 únicamente admitían "$2a$" como el prefijo para salt: PHP
|
|
5.3.7 introdujo los nuevos prefijos para corregir un problema de seguridad en la
|
|
implementación de Blowfish. Por favor, consulte
|
|
<link xlink:href="&url.crypt.blowfish;">este documento</link> para detalles
|
|
copletos de la corrección de seguridad, pero para resumir, los desarrolladores que se
|
|
oriente por PHP 5.3.7 y posteriores deberían usar "$2y$" en vez de "$2a$".
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<constant>CRYPT_SHA256</constant> - Hash SHA-256 con un salt de dieciséis caracteres
|
|
prefijado con $5$. Si el strig del salt inicia con 'rounds=<N>$', el valor numérico de N
|
|
se utiliza para indicar cuantas veces el bucle del hash se debe ejecutar, muy similar al parámetro
|
|
de costo en Blowfish. El número de rondas por defecto es 5000, hay un mínimo de
|
|
1000 y un máximo de 999,999,999. Cualquier selección de N por fuera de este rango será truncada al
|
|
límite más cercano.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<constant>CRYPT_SHA512</constant> - Hash SHA-512 con un salt de dieciséis caracteres
|
|
prefijado con $6$. Si el strig del salt inicia con 'rounds=<N>$', el valor numérico de N
|
|
se utiliza para indicar cuantas veces el bucle del hash se debe ejecutar, muy similar al parámetro
|
|
de costo en Blowfish. El número de rondas por defecto es 5000, hay un mínimo de
|
|
1000 y un máximo de 999,999,999. Cualquier selección de N por fuera de este rango será truncada al
|
|
límite más cercano.
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
<note>
|
|
<para>
|
|
A partir de PHP 5.3.0, PHP contiene su propia implementación y la utilizará
|
|
si el sistema carece de soporte para uno o varios de los algoritmos.
|
|
</para>
|
|
</note>
|
|
</refsect1>
|
|
|
|
<refsect1 role="parameters">
|
|
&reftitle.parameters;
|
|
<para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><parameter>str</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
El string al que realizarle el hash.
|
|
</para>
|
|
<caution>
|
|
<para>
|
|
El uso del algoritmo <constant>CRYPT_BLOWFISH</constant> resultará
|
|
en que el parámetro <parameter>str</parameter> sea truncado a una
|
|
longitud máxima de 72 caracteres.
|
|
</para>
|
|
</caution>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>salt</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
Un string opcional de salt para la base del hash. Si no se proporciona, el
|
|
comportamiento se define por la aplicación del algoritmo y puede conducir a
|
|
resultados inesperados.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="returnvalues">
|
|
&reftitle.returnvalues;
|
|
<para>
|
|
Devuelve un string con el hash o un string que es más corto que 13 caracteres
|
|
y que se garantiza que difiere del salt en caso de fallo.
|
|
</para>
|
|
<warning>
|
|
<simpara>
|
|
Cuando se validan contraseñas, se debería usar una función de comparación de
|
|
strings que no sea vulnerable a ataques de temporización para comparar la salida de
|
|
<function>crypt</function> con el hash conocido anteriormente. PHP 5.6 y siguientes
|
|
proporcionan <function>hash_equals</function> para este propósito.
|
|
</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>
|
|
Cuando se da la cadena de fallo "*0" como
|
|
<parameter>salt</parameter>, ahora se devuelve "*1" por consistencia
|
|
con otras implementaciones de crypt. Antes de esta versión, PHP 5.6
|
|
devolvía incorrectamente un hash DES.
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>5.6.0</entry>
|
|
<entry>
|
|
Se emite una advertencia de seguridad E_NOTICE si se omite <parameter>salt</parameter>.
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>5.5.21</entry>
|
|
<entry>
|
|
Cuando se da la cadena de fallo "*0" como
|
|
<parameter>salt</parameter>, ahora se devuelve "*1" por consistencia
|
|
con otras implementaciones de crypt. Antes de esta versión, PHP 5.5 (y
|
|
ramificaciones anteriores) devolvía incorrectamente un hash DES.
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>5.3.7</entry>
|
|
<entry>
|
|
Se añadieron los modos de Blowfish <literal>$2x$</literal> y <literal>$2y$</literal>
|
|
para tratar con ataques de bit alto potenciales.
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>5.3.2</entry>
|
|
<entry>
|
|
Agregado el crypt SHA-256 y SHA-512 basado en la
|
|
<link xlink:href="&url.crypt.sha;">implementación</link> de Ulrich Drepper.
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>5.3.2</entry>
|
|
<entry>
|
|
Corregido el comportamiento de Blowfish sobre rondas no válidas para devolver el string
|
|
"failure" ("*0" or "*1"), en lugar de caer al DES.
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>5.3.0</entry>
|
|
<entry>
|
|
PHP ahora contiene su propia implementación de los algoritmos MD5, DES estándar,
|
|
DES extendido y Blowfish y los utilizará si el sistema
|
|
carece de soporte para uno o varios de los algoritmos.
|
|
</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="examples">
|
|
&reftitle.examples;
|
|
<para>
|
|
<example>
|
|
<title><function>crypt</function> examples</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$hashed_password = crypt('mypassword'); // dejar que el salt se genera automáticamente
|
|
|
|
/* Se deben pasar todos los resultados de crypt() como el salt para la comparación de una
|
|
contraseña, para evitar problemas cuando diferentes algoritmos hash son utilizados. (Como
|
|
se dice arriba, el hash estándar basado en DES utiliza un salt de 2
|
|
caracteres, pero el hash basado en MD5 utiliza 12.) */
|
|
if (hash_equals($hashed_password, crypt($user_input, $hashed_password))) {
|
|
echo "¡Contraseña verificada!";
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Using <function>crypt</function> with htpasswd</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// Establece la contraseña
|
|
$password = 'mypassword';
|
|
|
|
// Obtiene el hash, dejando que el salt sea generado be automáticamente
|
|
$hash = crypt($password);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Using <function>crypt</function> with different hash types</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/* Estas sales son solamente ejemplos, y no deberían usarse textualmente en su código.
|
|
Debería generar una sal distinta correctamente formada para cada contraseña.
|
|
*/
|
|
if (CRYPT_STD_DES == 1) {
|
|
echo 'Standard DES: ' . crypt('rasmuslerdorf', 'rl') . "\n";
|
|
}
|
|
|
|
if (CRYPT_EXT_DES == 1) {
|
|
echo 'Extended DES: ' . crypt('rasmuslerdorf', '_J9..rasm') . "\n";
|
|
}
|
|
|
|
if (CRYPT_MD5 == 1) {
|
|
echo 'MD5: ' . crypt('rasmuslerdorf', '$1$rasmusle$') . "\n";
|
|
}
|
|
|
|
if (CRYPT_BLOWFISH == 1) {
|
|
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>
|
|
&example.outputs.similar;
|
|
<screen>
|
|
<![CDATA[
|
|
Standard DES: rl.3StKT.4T8M
|
|
Extended DES: _J9..rasmBYk8r9AiWNc
|
|
MD5: $1$rasmusle$rISCgZzpwk3UhDidwXvin0
|
|
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>
|
|
|
|
<refsect1 role="notes">
|
|
&reftitle.notes;
|
|
<note>
|
|
<simpara>
|
|
No hay función de descifrado, ya que <function>crypt</function> utiliza un
|
|
algoritmo de un solo sentido.
|
|
</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>La extensión <link linkend="ref.mcrypt">Mcrypt</link></member>
|
|
<member>La página man de la función crypt de Unix para más información</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
|
|
--> |