¿Puedo leer directamente los datos de estos archivos sin saber mi nombre de usuario / contraseña de MySQL?
Usted apuesta.
Estoy considerando encriptar y desencriptar las credenciales en la aplicación y almacenar solo la versión encriptada en la base de datos, ¿pero es necesario?
Tampoco almacene contraseñas de texto sin formato en su base de datos, y tampoco use cifrado simétrico (si lo hace, entonces cuando pierda su clave junto con las contraseñas cifradas, perdió).
La forma de almacenar contraseñas (en cualquier lugar, no importa si las almacena en archivos sin formato, bases de datos o en otro lugar) es saltearlas y hacerlas con una función hash segura. Una función hash toma una cadena de entrada y devuelve una cadena de aspecto aleatorio de longitud fija como una salida. Almacena esta cadena de apariencia aleatoria en su base de datos.
Cuando desee verificar si alguien ingresó la contraseña correcta, ejecute la contraseña a través de la función hash y verifique la cadena resultante contra la cadena en su base de datos.
De esta manera, las contraseñas no están expuestas (las funciones hash son funciones de una sola vía, lo que significa que no se puede invertir la función hash sin un gran esfuerzo).
Tenga en cuenta que simplemente hash de la contraseña no es suficiente. Tiene que concatenar un valor de sal aleatorio a la contraseña antes de modificarla y luego almacenar la salida de la función de hash Y el valor de sal en su base de datos. Necesitas hacer esto por varias razones:
1. Si no lo hace, entonces las contraseñas idénticas producirán una idéntica
valor hash
2. Alguien con algún tiempo en sus manos podría precalcular una tabla de
Contraseñas de hash (tablas del arco iris). Usando un valor de sal hace esto
Operación mucho más cara.
Hay funciones hash disponibles para las contraseñas de hash, por ejemplo, bcrypt. Usa uno de ellos en lugar de rodar el tuyo. NO utilice una función hash estándar como md5 o sha1. Todos están diseñados para ser rápidos, que es lo opuesto a lo que quieres en una función de hash de contraseña (para que los ataques de fuerza bruta en tu archivo de contraseña sean más difíciles cuando se roban).