Skip to main content

¿Qué es la fachada Crypt?

El servicio de cifrado de Laravel ofrece una interfaz sencilla para cifrar y descifrar valores usando el cifrado AES-256-CBC (o AES-128-CBC) de OpenSSL. Todos los valores cifrados por Laravel se firman con un código de autenticación de mensaje (MAC). Con esto, si el valor cifrado se altera, ya no se puede descifrar.

Configuración

Generación de APP_KEY

Antes de usar el cifrado, la clave key en config/app.php debe estar configurada. Este valor se lee de la variable de entorno APP_KEY. Genera una clave segura con el comando php artisan key:generate. Usa el generador de números aleatorios seguros de PHP para producir una clave criptográficamente segura.
Suele generarse automáticamente al instalar Laravel. La clave generada se guarda en el archivo .env.
Nunca hagas pública APP_KEY. Si se filtra, todos los datos cifrados podrían ser descifrados.

Rotación de la clave de cifrado

Cambiar la clave de cifrado hace que se desconecten todas las sesiones de usuario autenticadas. Es porque Laravel cifra todas las cookies, incluidas las de sesión. Además, los datos cifrados con la clave anterior no podrán descifrarse. Para mitigar este problema, puedes listar claves antiguas separadas por comas en APP_PREVIOUS_KEYS.
Para cifrar, Laravel siempre usa la clave actual; para descifrar, si falla con la clave actual, prueba las claves antiguas en orden. Así los usuarios pueden seguir usando la aplicación durante la rotación de claves.

Cifrado

Cifra un valor con el método encryptString de la fachada Crypt. El valor se cifra con OpenSSL y AES-256-CBC, y se firma con MAC.
encryptString cifra la cadena sin serializarla. Si necesitas cifrar objetos o arrays, usa encrypt.

Descifrado

Descifra un valor con decryptString de la fachada Crypt. Si no se puede descifrar correctamente (por ejemplo, MAC no válido), se lanza una DecryptException.

Casts en modelos

Usando el cast encrypted en un modelo Eloquent, el cifrado y descifrado del atributo son automáticos.
Con el cast configurado, la asignación y la lectura del atributo cifran y descifran automáticamente.
Los casts encrypted:* usan internamente Crypt::encrypt y Crypt::decrypt. Se recomienda usar el tipo de columna text o longText en la base de datos.

Ejemplo práctico: almacenamiento cifrado de datos personales

Patrón típico para guardar datos personales (número de identificación, tarjeta de crédito, etc.) de forma segura.

Migración

Modelo

Controlador


Resumen

Próximos pasos

Hashing

Aprende a hashear y verificar contraseñas de forma segura.

Autorización

Descubre el control de acceso con políticas y gates.
Última modificación el 13 de julio de 2026