1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-28 09:22:15 +01:00
Files
archived-doc-es/reference/strings/functions/crypt.xml
Juan Pablo Berdejo 298d7c35dd English version update
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@313393 c90b9560-bf6c-de11-be94-00142212c4b1
2011-07-18 15:49:40 +00:00

307 lines
10 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 55d88a8d9cdc6b9ac991e7bdc397e565dd204c93 Maintainer: jpberdejo 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>Hashing de una sola vía de un string</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 basado en <abbrev>DES</abbrev> estándar de Unix o
algoritmos alternativos que puedan estar disponibles en el sistema.
</para>
<para>
Algunos sistemas operativos soportan más de un tipo de hash. De
hecho, a veces el algoritmo estándar DES es sustituído por un
algoritmo basado en MD5. El tipo de hash se dispara mediante el argumento salt.
Antes de 5.3, PHP determinaría los algoritmos disponibles en el momento de la instalación,
basado en el crypt() del sistema. Si no se proporciona salt, PHP intentará
auto-generar ya sea un salt estándar de dos caracteres (DES) o uno de doce
caracteres (MD5), dependiendo de la disponibilidad del crypt() de MD5. PHP establece una
constante llamada <constant>CRYPT_SALT_LENGTH</constant> la cual indica la
mayor longitud válida de salt permitida por los hash disponibles.
</para>
<para>
El <function>crypt</function> estándar basado en DES devuelve el
salt como los primeros dos caracteres de la salida. También utiliza solamente los
primeros ocho caracteres de <parameter>str</parameter>, así que strings más largos
que inicien con los mismos ocho caracteres, generarán el mismo resultado
(cuando se utiliza el mismo salt).
</para>
<simpara>
En sistemas donde la función crypt() soporta múltiples
tipos de hash, las siguientes contantes se establecen en 0 ó 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 Blowfish con un salt como sigue:
"$2a$", un parámetro de costo de dos dígitos, "$" y 22 dígitos del alfabeto
"./0-9A-Za-z". Utilizar caracteres fuera de este rango en el salt causará que crypt()
devuelva un string de longitud cero. Los dos dígitos del parámetro de costo es el logaritmo en base-2 del
conteo de iteración para el algoritmetro hash subyacente basado en Blowfish y debe estar en el
rango de 04-31, valores por fuera de este rango causarán que crypt() falle.
</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=&lt;N&gt;$', 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=&lt;N&gt;$', 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 para hacerle el hash.
</para>
</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>
</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.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
$password = crypt('mypassword'); // deja 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 (crypt($user_input, $password) == $password) {
echo "Password verified!";
}
?>
]]>
</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
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 desencriptado, ya que <function>crypt</function> utiliza un
algoritmo de un solo sentido.
</simpara>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<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
-->