-- Las funciones de encriptación -- Hay ciertos datos que se tienen que guardar encriptados -- filtraciones de bases de datos hay siempre -- Si yo guardo el dato encriptado como se si es igual a algo -- Si yo quiero saber si la contraseña que me ha introducido un usuario -- Es igual a la que tengo almacenada lo único que tengo que hace -- Es encriptar la contraseña que me han introducido y comprobar que es igual -- a la de la base de datos -- Porque las funciones de encriptación con la misma entrada -- Devuelven la misma salida -- Nunca a partir de los datos encriptados se puede obtener el valor original -- El problema es que se pueden generar diccionarios con combinaciones de letras -- Y no hace falta poder obtener el valor original -- hay muchas páginas que hacen md5 reverse (https://md5.gromweb.com/ , https://md5decrypt.net/en/) -- En realidad son funciones de HASH: obtener un número único más pequeño a partir de -- un conjunto de datos, como en el DNI -- 12345678 Z (Z es el HASH de 12345678) -- Vamos al turrón ¿Cómo codificar? -- La más simple_ md5 devuelve una cadena de 32 caracteres de longitud select md5('cualquier cosa'); select md5('a'); select md5('cualquier cosa en un lugar de la mancha de cuyo nombre no quiero acordarme') foo; -- No se recomienda usar md5 porque tiene unos años y está muy investigada -- Sobre todo hay muchos diccionarios con casi todas las combinaciones -- SI yo al md5 le concateno una cadena aleatoria gano en complejidad select md5('cadena') res; select md5(concat('cadena','una cadena aletoria con cosas raras &(4&%$U0atgoNBl3vl8gGauSUhZUVxJH59lrdB')) res; -- Ahora se usa el SHA que hay SHA1 SHA2 -- Esta función es más segura que MD5 select sha('cadena'); select sha2('cadena',224); -- El SHA2 viene en varios sabores: 224, 256, 384, 512 -- Número de bits de longitud de la clave generada, cuanto más grande -- más seguro y también más coste de cálculo select sha2('cadena',256); select sha2('cadena',384); select sha2('cadena',512); -- Mi recomendación particular es que concatenemos una cadena incluso -- si usamos SHA2 '%&34m.ñAA' update actor set password=sha2(concat(first_name,'%&34m.ñAA'),512); -- Como se yo si por ejemplo me entra un usuario y me dice -- Soy el usuario 1 y mi password es 'PENELOPE' -- El resultado de sha2(concat('PENELOPE','%&34m.ñAA'),512) -- debería ser igual a lo que tengo en la BD select * from actor where actor_id=1 and password=sha2(concat('PENELOPE','%&34m.ñAA'),512); -- Esto no me devuelve nada porque la contraseña no coincide select * from actor where actor_id=1 and password=sha2(concat('penelope','%&34m.ñAA'),512); -- Lo mismo para cualquier actor select * from actor where actor_id=152 and password=sha2(concat('BEN','%&34m.ñAA'),512); -- Hay mil sitios que nos permiten decodificar así que cuidado -- https://10015.io/tools/sha512-encrypt-decrypt