Función PHP crypt()
❮ Referencia de cadenas de PHP
Definición y uso
La función crypt() devuelve una cadena codificada mediante algoritmos DES, Blowfish o MD5.
Esta función se comporta de manera diferente en diferentes sistemas operativos. PHP verifica qué algoritmos están disponibles y qué algoritmos usar cuando está instalado.
El parámetro salt es opcional. Sin embargo, crypt() crea una contraseña débil sin sal. Asegúrese de especificar una sal lo suficientemente fuerte para mayor seguridad.
Hay algunas constantes que se usan junto con la función crypt(). PHP establece el valor de estas constantes cuando se instala.
Constantes:
- [CRYPT_STD_DES]: hash estándar basado en DES con sal de dos caracteres del alfabeto "./0-9A-Za-z". El uso de caracteres no válidos en el salt hará que esta función falle.
- [CRYPT_EXT_DES]: hash extendido basado en DES con una sal de nueve caracteres que consta de un guión bajo seguido de 4 bytes de recuento de iteraciones y 4 bytes de sal. Estos están codificados como caracteres imprimibles, 6 bits por carácter, el carácter menos significativo primero. Los valores del 0 al 63 se codifican como "./0-9A-Za-z". El uso de caracteres no válidos en la sal hará que la función falle.
- [CRYPT_MD5] - Hashing MD5 con una sal de 12 caracteres que comienza con $1$
- [CRYPT_BLOWFISH] - Blowfish hash con una sal que comienza con $2a$, $2x$ o $2y$, un parámetro de costo de dos dígitos "$" y 22 caracteres del alfabeto "./0-9A-Za-z" . El uso de caracteres fuera del alfabeto hará que esta función devuelva una cadena de longitud cero. El parámetro "$" es el logaritmo en base 2 del recuento de iteraciones para el algoritmo hash subyacente de Blowfish-bashed y debe estar en el rango 04-31. Los valores fuera de este rango harán que la función falle.
- [CRYPT_SHA_256]: hash SHA-256 con una sal de 16 caracteres a partir de $5$. Si la cadena salt comienza con "rounds=<N>$", el valor numérico de N se usa para indicar cuántas veces se debe ejecutar el ciclo hash, de manera muy similar al parámetro de costo en Blowfish. El número predeterminado de rondas es 5000, hay un mínimo de 1000 y un máximo de 999 999 999. Cualquier selección de N fuera de este rango se truncará al límite más cercano.
- [CRYPT_SHA_512]: hash SHA-512 con un salt de 16 caracteres a partir de $6$. Si la cadena salt comienza con "rounds=<N>$", el valor numérico de N se usa para indicar cuántas veces se debe ejecutar el ciclo hash, de manera muy similar al parámetro de costo en Blowfish. El número predeterminado de rondas es 5000, hay un mínimo de 1000 y un máximo de 999 999 999. Cualquier selección de N fuera de este rango se truncará al límite más cercano.
En los sistemas en los que esta función admite varios algoritmos, las constantes anteriores se establecen en "1" si se admiten y en "0" en caso contrario.
Nota: No hay función de descifrado. La función crypt() utiliza un algoritmo unidireccional.
Sintaxis
crypt(str,salt)
Valores paramétricos
Parameter | Description |
---|---|
str | Required. Specifies the string to be hashed |
salt | Optional. A salt string to base the hashing on |
Detalles técnicos
Valor devuelto: | Devuelve la cadena codificada o una cadena que tiene menos de 13 caracteres y se garantiza que diferirá de la sal en caso de falla |
---|---|
Versión PHP: | 4+ |
Registro de cambios: | PHP 5.6.0: muestra una advertencia de seguridad E_NOTICE si se omite sal . PHP 5.3.7 - Se agregaron los modos $2x$ y $2y$ Blowfish. PHP 5.3.2: se agregaron SHA-256 y SHA-512. Se corrigió el comportamiento de Blowfish en rondas no válidas que devuelve una cadena de "fallo" ("*0" o "*1"), en lugar de volver a DES. PHP 5.3.0: PHP ahora contiene su propia implementación para la cripta MD5, Standard DES, Extended DES y los algoritmos Blowfish y la usará si el sistema no es compatible con uno o más de los algoritmos. |
Más ejemplos
Ejemplo
En este ejemplo probaremos los diferentes algoritmos:
<?php
// 2 character salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES not supported.\n<br>";
}
// 4 character salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Extended DES not supported.\n<br>";
}
// 12 character salt starting with $1$
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 not supported.\n<br>";
}
// Salt starting with $2a$. The two digit cost parameter: 09. 22 characters
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES not supported.\n<br>";
}
// 16 character salt starting with $5$. The default number of rounds is 5000.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>"; }
else
{
echo "SHA-256 not supported.\n<br>";
}
// 16 character salt starting with $6$. The default number of rounds is 5000.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 not supported.";
}
?>
El resultado del código anterior podría ser (dependiendo del sistema operativo):
Standard DES: stqAdD7zlbByI
Extended DES: _S4..someQXidlBpTUu6
MD5: $1$somethin$4NZKrUlY6r7K7.rdEOZ0w.
Blowfish: $2a$09$anexamplestringforsaleLouKejcjRlExmf1671qw3Khl49R3dfu
SHA-256: $5$rounds=5000$anexamplestringf$KIrctqsxo2wrPg5Ag/hs4jTi4PmoNKQUGWFXlVy9vu9
SHA-512: $6$rounds=5000$anexamplestringf$Oo0skOAdUFXkQxJpwzO05wgRHG0dhuaPBaOU/
oNbGpCEKlf/7oVM5wn6AN0w2vwUgA0O24oLzGQpp1XKI6LLQ0.
❮ Referencia de cadenas de PHP