Los últimos tutoriales de desarrollo web
 

PHP crypt() Function


<String Referencia PHP

Definición y Uso

La crypt() función devuelve una cadena hash utilizando algoritmos DES, Blowfish, o MD5.

Esta función se comporta diferente en diferentes sistemas operativos. PHP comprueba qué servicios están disponibles algoritmos y qué algoritmos para usar cuando se instala.

El parámetro sal es opcional. Sin embargo, crypt() crea una contraseña débil y sin la sal. Asegúrese de especificar una sal lo suficientemente fuerte para mayor seguridad.

Hay algunas constantes que se utilizan junto con el crypt() función. El valor de estas constantes son fijados por PHP cuando se instala.

constantes:

  • [CRYPT_STD_DES] - Estándar de hash DES-basado con de dos caracteres del alfabeto "./0-9A-Za-z" . El uso de caracteres no válidos en la sal hará que esta función falle.
  • [CRYPT_EXT_DES] - Extended hash basado-DES con una sal de nueve caracteres que consiste en un guión bajo seguido de 4 bytes del número de iteraciones y 4 bytes de sal. Estos se codifican como caracteres imprimibles, 6 bits por carácter, menos carácter significativo en primer lugar. Los valores de 0 a 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] - hash MD5 con una sal de 12 caracteres empezando por $ 1 $
  • [CRYPT_BLOWFISH] - hash de Blowfish con una sal a partir de $ 2a $, $ $ 2x, 2y $ o $, unos dos parámetros de costos dígitos "$" , y 22 caracteres del alfabeto "./0-9A-Za-z" . El uso de caracteres fuera del alfabeto hará que esta función para devolver una cadena de longitud cero. El "$" parámetro es el logaritmo en base 2 del número de iteraciones para el algorithmeter hash de Blowfish-golpeado subyacente y debe estar en el rango 04-31. Los valores fuera de este rango hará que la función falle.
  • [CRYPT_SHA_256] - hash SHA-256 con una sal de 16 caracteres a partir de $ 5 $. Si la cadena comienza con sal "rounds=<N>$" , el valor numérico de N se utiliza para indicar cuántas veces el bucle de hash debe ser ejecutado, al igual que el parámetro de coste de Blowfish. El número predeterminado de rondas es de 5000, hay un mínimo de 1.000 y un máximo de 999.999.999. Cualquier selección de N, fuera de esta gama será truncado con el límite más cercano.
  • [CRYPT_SHA_512] - hash SHA-512 con una sal de 16 caracteres a partir de $ 6 $. Si la cadena comienza con sal "rounds=<N>$" , el valor numérico de N se utiliza para indicar cuántas veces el bucle de hash debe ser ejecutado, al igual que el parámetro de coste de Blowfish. El número predeterminado de rondas es de 5000, hay un mínimo de 1.000 y un máximo de 999.999.999. Cualquier selección de N, fuera de esta gama será truncado con el límite más cercano.

En sistemas donde esta función es compatible con múltiples algoritmos, las constantes anteriores se establecen en "1" si es compatible y "0" lo contrario.

Note: No existe una función de descifrado. El crypt() función utiliza un algoritmo de una sola vía.


Sintaxis

crypt( str,salt )

Parámetro Descripción
str Necesario. Especifica la cadena que se va hash
salt Opcional. Una cadena sal de basar el hash de

Detalles técnicos

Valor de retorno: Devuelve la cadena codificada o una cadena que es más corto que 13 caracteres y está garantizado para diferir de la sal en caso de fallo
Versión de PHP: 4+
cambios: se añadieron $ 2x $ y $ $ 2y modos Blowfish en PHP 5.3.7 para hacer frente a posibles ataques de bits alta.

Las constantes de SHA-256 y SHA-512 se añadieron en PHP 5.3.2.

A partir de PHP 5.3.2, el comportamiento Blowfish en las rondas no válidos devuelve el "failure" de cadena ("*0" or "*1") , en lugar de caer al DES.

A partir de PHP 5.3.0, PHP contiene su propia implementación de la cripta MD5, DES estándar, extendido DES y los algoritmos Blowfish y utilizará de que si el sistema carece de soporte para uno o más de los algoritmos.

Ejemplo

Ejemplo 1

En este ejemplo vamos a probar 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 $5$. 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.";
}
?>

La salida del código anterior podría ser (depending on the operating system) :

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.


<String Referencia PHP