Cadenas
PHP Manual

crypt

(PHP 4, PHP 5)

crypt — Encripta una cadena mediante un algoritmo no reversible (hash)

Descripción

string crypt ( string $cadena [, string $semilla ] )

crypt() encriptará una cadena utilizando el método estándar de encriptación del Unix: DES. Los argumentos son una cadena a encriptar y una cadena semilla de 2 caracteres en la que basar la encriptación. Vea la página del manual de Unix sobre crypt para más información.

Si el argumento de semilla no se proporciona, será generado aleatoriamente por PHP cada vez que se llama a la función.

Algunos sistemas operativos soportan más de un tipo de encriptación. De hecho, algunas veces la encriptación estándar DES es sustituída por un algoritmo de encriptación basado en MD5. El tipo de encriptación se selecciona en base al argumento semilla. En tiempo de instalación, PHP determina la capacidad de la función de encriptación y aceptará semillas para otros tipos de encriptación. Si no se proporciona la semilla, PHP intentará generar una semilla estándar DES de 2 caraceres por defecto, excepto si el tipo de encriptación estándar del sistema es el MD5, en cuyo caso se generará una semilla aleatoria compatible con MD5. PHP fija una constante llamada CRYPT_SALT_LENGTH que le especifica si su sistema soporta una semilla de 2 caracteres o si se debe usar la semilla de 12 caracteres de longitud.

Si se utiliza la semilla proporcionada, debe tenerse en cuenta que la semilla se genera una sola vez. Por tanto, si se llama a esta función repetidamente, puede que se produzca un potencial problema de seguridad.

La función estándar de encriptación crypt() devuelve la semilla como los dos primeros caracteres de la salida generada. Además, solamente emplea los 8 primeros caracteres del parámetro cadena , por lo que si se utilizan 2 cadenas largas cuyos 8 primeros caracteres son identicos, la salida generada será la misma (siempre que se emplee la misma semilla).

En los sistemas en los que la función crypt() soporta múltiples tipos de encriptación, las siguienes constantes son fijadas a 0 ó 1 dependiendo de si está disponible el tipo dado:

Note: No existe una función de desencriptado, ya que crypt() utiliza algoritmos no reversibles.

Example#1 Ejemplos de crypt()

<?php
$contrasena 
crypt('mi_contrasena'); // la semilla se genera automaticamente

/* Para realizar las comprobaciones de contrasenas, se debe establecer como valor de la 
    semilla el valor completo devuelto por crypt(). De esta forma, se evitan los 
    problemas que se pueden producir cuando se emplean diferentes algoritmos de 
    encriptacion. (Como se detalla previamente, el metodo DES estandar emplea una semilla 
    de 2 caracteres mientras que el metodo MD5 utiliza una semilla de 12 caracteres.
    */
if (crypt($datos_introducidos_por_el_usuario$contrasena) == $contrasena) {
   echo 
"La contrasena proporcionada por el usuario coincide con la contrasena establecida";
}
?>

Example#2 Empleando crypt() con htpasswd

<?php
// Establecer la contrasena
$contrasena 'mi_contrasena';

// Obtener el hash, generandose la semilla de forma aleatoria
$hash crypt($contrasena);
?>

Example#3 Empleando crypt() con diferentes métodos de encriptación

<?php
if (CRYPT_STD_DES == 1) {
    echo 
'DES estandar: ' crypt('rasmuslerdorf''rl') . "\n";
}

if (
CRYPT_EXT_DES == 1) {
    echo 
'DES extendido: ' 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$rasmuslerd...........$') . "\n";
}
?>

El resultado del ejemplo seria algo similar a:

DES estandar: rl.3StKT.4T8M
DES extendido: _J9..rasmBYk8r9AiWNc
MD5:          $1$rasmusle$rISCgZzpwk3UhDidwXvin0
Blowfish:     $2a$07$rasmuslerd............nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra

Vea también: md5() y la extensión Mcrypt.


Cadenas
PHP Manual