El cifrado PHP es importante para la privacidad y seguridad de tus datos. En términos prácticos, el cifrado PHP utiliza algoritmos (a veces llamados algoritmos hashing) para traducir los datos «claros» en texto cifrado que requiere procesos de descifrado muy específicos para «descodificar» los datos de vuelta a la versión limpia.
Estos algoritmos basados en las matemáticas codifican el texto plano en un texto cifrado incoherente que sólo puede descifrar el destinatario previsto que posea la «clave». Un ejemplo común es el cifrado HTTPS que protege la comunicación cliente-servidor.
Deja de perder el tiempo con los servidores
Cloudways se encarga de gestionar los servidores por ti para que puedas centrarte en crear grandes aplicaciones y mantener contentos a tus clientes.
¿Por qué es importante la encriptación para la protección de datos?
El cifrado es un componente básico, pero importante, de cualquier aplicación, porque te permite proteger de forma segura los datos a los que no quieres que acceda nadie. Esto ha adquirido una importancia aún mayor en la era en que la información personal o empresarial se almacena normalmente en servidores «en la nube».
Para las empresas, la falta de un cifrado adecuado podría acarrear grandes daños, porque una filtración de datos empresariales clasificados podría beneficiar a la competencia. Una filtración de información de clientes no es sólo una pesadilla de relaciones públicas; podría dar lugar a demandas judiciales y a la disolución de la empresa.
Por eso el cifrado, especialmente el cifrado de contraseñas difícil de descifrar, es una de las características básicas de seguridad PHP que los clientes esperan de cualquier aplicación PHP.
El proceso se utiliza para encriptar contraseñas:
- Crea una clave de encriptación única (DEK)
- Revuelve la información utilizando una encriptación de clave única.
- Traslada la clave única de encriptación (DEK) a Cloud KMS para su encriptación, que devuelve la KEK.
- Guarda los datos encriptados y la clave (KEK) entre sí.
- Retira la clave generada (DEK)
¿Cómo encripta Mysql las contraseñas PHP?
MySQL no almacena las contraseñas como texto plano, sino como un valor hash calculado por la función Password(). Utilizar la función Contraseña() para cifrar contraseñas es aceptable, pero puedes utilizar métodos de cifrado más potentes. Los documentos de PHP MySQL sobre encriptación de contraseñas indican explícitamente que Password() sólo debe utilizarse para gestionar contraseñas de cuentas internas de MySQL. Cada vez que creamos una nueva cuenta de usuario mediante el comando CREAR USUARIO, MySQL toma el valor IDENTIFIED BY y lo ejecuta a través de la función Password() entre bastidores. Para ello, recomiendan utilizar algo un poco más potente como SHA1 o Hash() y una sal aleatoria por Contraseña para generar sus tablas arco iris basadas en la sal común. Eso debería ser fuerte para la mayoría de los propósitos.
Métodos de encriptación PHP
Actualmente, los desarrolladores pueden optar por varios métodos de encriptación, siendo los más comunes el hashing, la encriptación de clave secreta y el método de encriptación de sobre. Cada método de encriptación viene con múltiples algoritmos o cifrados (cada uno con sus propios puntos fuertes y débiles).
Hashing
Las aplicaciones permiten a los usuarios introducir información personal que luego se guarda en la base de datos. Ahora los desarrolladores tienen que asegurarse de que estos datos permanezcan ilegibles.
Ahora imagina un escenario en el que un pirata informático fuerza su entrada a las bases de datos y accede a los datos de los usuarios. Gracias al hashing, estos datos permanecerían ilegibles.
El hash producido por password_hash() es excepcionalmente seguro. Pero podrás hacerlo más seguro con dos sencillos procedimientos: ampliando el coste de Bcrypt, o actualizando automáticamente el algoritmo hash
Aquí estamos utilizando una función de PHP llamada password_hash que es un algoritmo de hash unidireccional realmente fuerte vamos a utilizar bcrypt que es el algoritmo que está integrado en el lenguaje PHP que se actualiza a medida que pasa el tiempo lo que asegura que este método esté siempre actualizado así que en comparación con otros métodos hash que solíamos tener en el pasado llamados md5 o state 256 este está siempre actualizado y se debe utilizar cuando se desea tener contraseñas para algún otro tipo de información dentro de un sitio web.
La función Salt ya está incluida dentro de password_hash, Salt es básicamente cuando añadimos una cadena aleatoria a nuestra contraseña antes de insertarla dentro de la base de datos para hacer aún más difícil que la gente averigüe qué contraseña es.
Este es un ejemplo de uso de la técnica hash «bcrypt».
Entrada:
<?php
echo "Shahzeb Ahmed";
echo "<br>";
echo password_hash("Cloudways", PASSWORD_DEFAULT);
?>
Salida:
Shahzeb Ahmed $2y$10$LZExuh/rXamd/X5yuDatn.L8ROlKBry3xidvWc.O19nx85.CrSrO.
Quieres poder ver la contraseña una vez que la hayamos descifrado porque está diseñada para ser lo más segura posible. Esto significa que ni siquiera TÚ, como propietario del sitio web, deberías poder leer otras contraseñas.
Cifrado de clave secreta
El Cifrado de Clave Secreta también se llama Cifrado Simétrico, El Cifrado de Clave Secreta del PHP utiliza una sola clave, llamada secreto compartido, tanto para cifrar como para descifrar.
Para encriptar los datos, el emisor (para encriptar) y el receptor (para desencriptar) utilizan la misma clave. Por tanto, la clave es compartida. Esta clave debe mantenerse en secreto para garantizar la privacidad.
Es un método de encriptación sencillo y fácil de usar, pero tiene un problema: La clave debe ser compartida entre el remitente y el destinatario de los datos, Además, no es preferible utilizar un método de cifrado simétrico en el que se utilice una red pública para compartir la clave. De lo contrario, si un tercero intercepta la clave durante el intercambio, una persona no autorizada puede descifrar fácilmente los datos.
Encriptación de sobres
El cifrado envolvente es la idea de que metes los datos en un sobre virtual cifrándolos, los bloqueas para uno o varios receptores (cifrando la clave de cifrado de los datos, por ejemplo utilizando RSA), y luego pones la dirección del receptor, el tipo de bloqueo (el algoritmo) y el identificador de la clave requerida en el exterior.
Podemos utilizar el servicio Cloud KMS que puede utilizar una clave para cifrar, descifrar o firmar datos como secretos para su almacenamiento. que en realidad proporciona el Servicio de Gestión de Claves en la Nube de Google.
¿Cómo encriptar y desencriptar contraseñas con PHP?
La forma más sencilla de proteger contraseñas en PHP es utilizar las funciones password_hash y verify.
El siguiente ejemplo muestra la forma de utilizar el método password_hash():
Entrada:
<?php // The unencrypted password to be hashed $unencrypted_password = "Cloudways@123"; // The hash of the password can be saved in the database $hash = password_hash($unencrypted_password, PASSWORD_DEFAULT); // Print the generated hash code echo "Generated hash code: ".$hash; ?>
Salida:
Generated hash code: 2y10D6pwJsA5KKdUs7tlrIC3z.we7QZR58wx9gEiuLlQ/dr7E/Rtnj9Ce
El descifrado de la contraseña: Para descifrar el hash de una contraseña y recuperar la cadena original, utilizamos la función password_verify().
Sintaxis:
bool password_verify(string $password, string $hash)
Verifica que el hash dado coincide con la contraseña dada.
La función password_verify( ) verifica que el hash dado coincide con la contraseña dada, generada por la función password_hash() . Devuelve verdadero si la contraseña y el hash coinciden, o falso en caso contrario.
<?php
// Plaintext password entered by the user
$unencrypted_password = "Cloudways@123";
// The hashed password can be retrieved from database
$hash ="2y10D6pwJsA5KKdUs7tlrIC3z.we7QZR58wx9gEiuLlQ/dr7E/Rtnj9Ce";
// Verify the hash code against the unencrypted password entered
$verify = password_verify($unencrypted_password, $hash);
// Print the result depending if they match
if ($verify) {
echo 'Correct Password!';
}
else {
echo 'Password is Incorrect';
}
?>
Salida:
Correct Password!
Conclusión
Espero que hayas aprendido la importancia del Cifrado PHP y junto con los distintos tipos de métodos de Cifrado PHP con ejemplos. No puedes sustituir un certificado SSL por una contraseña hash en el lado del usuario y, de hecho, será innecesario hashearla en primer lugar. Hacer hash de las contraseñas sólo tiene sentido en la máquina del servidor.
¿Cuál es la mejor forma de encriptar la contraseña en PHP?
PHP engloba un algoritmo hash para encriptar la contraseña. La mayoría de las funciones que se utilizan para encriptar contraseñas son crypt(), password_hash() y md5().
Start Growing with Cloudways Today.
Our Clients Love us because we never compromise on these
Shahzeb Ahmed
Un creativo de día (con una taza de té) y un creativo de noche. Ahmad Kamran es redactor de contenidos estacionales y Ejecutivo de Marketing Senior en Cloudways. Puedes encontrarle en su escritorio escribiendo, elaborando estrategias o jugando. Y en caso de que no puedas encontrarle aquí, estará en la montaña o junto a la orilla del río.