Cualquier información sensible debe almacenarse encriptada para una mayor seguridad. Magento proporciona una serie de clases y funciones para facilitar el cifrado y descifrado de cualquier dato sensible para poder almacenarlo con seguridad.
Por defecto, Magento utiliza el algoritmo AES-256 para la encriptación de todos los datos que pueden requerir su desencriptación en algún momento (p.ej. tarjetas de crédito).
Por otro lado, para cifrar datos que no van a requerir desencriptación (p.ej. contraseñas de usuarios), Magento permite generar hashes utilizando el algoritmo MD5, SHA-256 y Argon 2ID13.
Encriptar y desencriptar datos en Magento
Para facilitar la encriptación de datos en Magento, se proporciona la clase \Magento\Framework\Encryption\Encryptor que puede inyectarse desde nuestro código para cifrar y descifrar cualquier información:
<?php
class MyClass
{
public function __construct(
protected \Magento\Framework\Encryption\Encryptor $encryptor
) {}
public function encrypt(string $data): string
{
return $this->encryptor->encrypt($data);
}
public function decrypt(string $data): string
{
return $this->encryptor->decrypt($data);
}
}
Generar hash de datos en Magento
Además de la encriptación vista anteriormente, la clase Encryptor de Magento también permite generar hashes de datos que no pueden descifrarse. Este tipo de encriptación es utilizada por Magento para almacenar las contraseñas de los usuarios utilizando algoritmos como MD5, SHA-256 o Argon2.
<?php
class MyClass
{
public function __construct(
protected \Magento\Framework\Encryption\Encryptor $encryptor
) {}
public function hash(string $data): string
{
return $this->encryptor->getHash($data);
}
}
Como resultado de esta encriptación, se generará un hash con el siguiente formato:
password_hash:salt:version<n>:version<n>
Este formato permite identificar rapidamente los algoritmos de hash utilizados y, en caso de ser necesario, permite una migración de los hashes a un algoritmo más seguro utilizando el siguiente comando proporcionado por el CLI de Magento:
bin/magento customer:hash:upgrade
Configuración de clave de encriptación
Los algoritmos de cifrado explicados utilizan una clave de encriptación (crypt key) almacenada en el fichero app/etc/env.php.
Esta clave es generada durante la instalación del sistema Magento y toda la información cifrada almacenada en base de datos requiere de esta clave para su utilización. Es decir, si se cambia manualmente esta clave o se copia la base de datos a un sistema que cuenta con una clave de encriptación diferente, los datos cifrados serán incompatibles y no podrán utilizarse.
Sin embargo, Magento incluye una sección en el administrador que permite modificar esta clave de encriptación de forma controlada desde System -> Other Settings -> Manage Encryption Key:

Magento: Manage Encryption Key
Recomendaciones de seguridad
A continuación se incluyen una serie de recomendaciones para mantener un sistema Magento seguro y proteger los datos de los usuarios:
- Utilizar los algoritmos de encriptación que proporciona Magento siempre que se trabaje con información sensible en módulos personalizados.
- Utilizar el algoritmo Argon2 para el cifrado de contraseñas (Se requiere la instalación de la extensión PHP Sodium).
- Nunca compartir los hashes generados en nuestro proyecto (p.ej. contraseñas cifradas).
- Nunca compartir la crypt key de nuestro proyecto.
- Nunca compartir ni permitir el acceso al fichero env.php de nuestro proyecto.
- Nunca almacenar información sensible en base de datos sin encriptación.
A pesar de que los algoritmos de hash no permiten descifrar los datos encriptados, existen herramientas que permiten crackear estos datos mediante fuerza bruta, pudiendo llegar a obtener la contraseña descifrada. Por ello, conviene siempre utilizar algoritmos de encriptación fuertes como Argon2.