La función crypt() devuelve una cadena cifrada utilizando el algoritmo DES, Blowfish o MD5.
Esta función se comporta de manera diferente en diferentes sistemas operativos y algunos sistemas operativos admiten más de un tipo de algoritmo. En el momento de la instalación, PHP comprueba qué algoritmos están disponibles y qué algoritmos se utilizan.
El algoritmo exacto depende del formato y la longitud del argumento salt. Salt puede hacer que el cifrado sea más seguro al aumentar la cantidad de cadenas generadas a partir de una cadena específica con un método de cifrado específico.
A continuación se muestran algunas constantes utilizadas con la función crypt(). Estos valores constantes los establece PHP durante la instalación.
constante:
[CRYPT_SALT_LENGTH] - Longitud de cifrado predeterminada. Utilice cifrado DES estándar, longitud 2
[CRYPT_STD_DES] - Cifrado estándar basado en DES con una sal de 2 caracteres del alfabeto "./0-9A-Za-z". El uso de caracteres no válidos en salt hará que la función falle.
[CRYPT_EXT_DES]: cifrado extendido basado en DES con un salt de 9 caracteres que consta de un guión bajo, seguido de un número de iteración de 4 bytes y un salt de 4 bytes. 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 salt hará que la función falle.
[CRYPT_MD5] - Cifrado MD5 con un salt de 12 caracteres que comienza con $1$.
[CRYPT_BLOWFISH] - El cifrado Blowfish tiene una sal que comienza con $2a$, $2x$ o $2y$, un parámetro de costo de dos dígitos "$" y del alfabeto "./0-9A-Za-z" 22 caracteres. en . El uso de caracteres fuera del alfabeto hará que la función devuelva una cadena de longitud cero. El parámetro "$" es el logaritmo en base 2 del número de iteraciones del algoritmo hash Blowfish y debe estar en el rango 04-31. Los valores fuera de este rango harán que la función falle.
[CRYPT_SHA_256] - El cifrado SHA-256 tiene una sal de 16 caracteres, que comienza con $5$. Si la cadena de sal comienza con "rondas=<N>$", el valor numérico de N se usa para representar el número de veces que se ejecuta la ronda hash, similar al parámetro de costo en Blowfish. El número predeterminado de ciclos es 5000, el valor mínimo es 1000 y el valor máximo es 999,999,999. Cualquier valor de N fuera de este rango se convertirá al valor límite más cercano.
[CRYPT_SHA_512] - El cifrado SHA-512 tiene una sal de 16 caracteres, que comienza con $6$. Si la cadena de sal comienza con "rondas=<N>$", el valor numérico de N se usa para representar el número de veces que se ejecuta la ronda hash, similar al parámetro de costo en Blowfish. El número predeterminado de ciclos es 5000, el valor mínimo es 1000 y el valor máximo es 999,999,999. Cualquier valor de N fuera de este rango se convertirá al valor límite más cercano.
En sistemas donde esta función admite múltiples algoritmos, las constantes anteriores se establecen en "1" si se admiten y en "0" en caso contrario.
Nota: No existe una función de descifrado correspondiente. La función crypt() utiliza un algoritmo unidireccional.
cripta( str,sal )
parámetro | describir |
---|---|
cadena | Requerido. Especifica la cadena que se va a codificar. |
sal | Opcional. Una cadena utilizada para aumentar la cantidad de caracteres que se codifican para hacer la codificación más segura. Si no se proporciona ningún argumento salt, se generará uno aleatoriamente cada vez que se llame a la función. |
Valor de retorno: | Devuelve una cadena cifrada o, en caso de error, una cadena de menos de 13 caracteres que se garantiza que será diferente del salt. |
---|---|
Versión PHP: | 4+ |
Registro de actualización: | En PHP 5.3.7, se agregaron los modos Blowfish $2x$ y $2y$ para hacer frente a posibles ataques de alto nivel. En PHP 5.3.2, se agregaron las nuevas constantes SHA-256 y SHA-512. A partir de PHP 5.3.2, Blowfish devolverá la cadena de "fallo" ("*0" o "*1") en bucles no válidos en lugar de recurrir a DES. Desde PHP 5.3.0, PHP viene con implementación de cifrado MD5, implementación DES estándar, implementación DES extendida y algoritmo Blowfish. Si el sistema no admite el algoritmo anterior, se utilizará el algoritmo propio de PHP. |
Utilice htpasswd para el cifrado crypt():
<?php // Establecer contraseña $contraseña = ' micontraseña ' ; // Obtenga el valor hash, use el valor salt automático $hash = cripta ( $contraseña ) ? >En este ejemplo, utilizamos diferentes tipos de hash:
<?php si ( CRYPT_STD_DES == 1 ) { eco ' DES estándar : ' . cripta ( ' rasmuslerdorf ' , ' rl ' ) . si ( CRYPT_EXT_DES == 1 ) { eco ' DES extendido : ' .cripta ( ' rasmuslerdorf ' , ' _J9..rasm ' ) . si ( CRYPT_MD5 == 1 ) { eco ' MD5 : ' cripta ( ' rasmuslerdorf ' , ' $ 1 $ rasmusle $ ' ) . si ( CRYPT_BLOWFISH == 1 ) { eco ' Pez globo: ' . cripta ( ' rasmuslerdorf ' , ' $ 2a $ 07 $usesomesillystringforsalt $ ' ) . si ( CRYPT_SHA256 == 1 ) { eco ' SHA-256: ' . cripta ( ' rasmuslerdorf ' , ' $ 5 $ rondas = 5000 $ usesomesillystringforsalt$ ' ) . si ( CRYPT_SHA512 == 1 ) { eco ' SHA-512: ' . cripta ( ' rasmuslerdorf ' , ' $6 $ rondas =5000$usesomesillystringforsalt$ ' ) " n " ; ?>El código anterior genera lo siguiente (según el sistema operativo):
DES estándar: rl.3StKT.4T8MEDES extendido: _J9..rasmBYk8r9AiWNcMD5: $1$rasmusle$rISCgZzpwk3UhDidwXvin0Blowfish: $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hiSHA-256: $5$rondas=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6SHA-512: $6$rondas=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21