No, no lo es.
Si bien es el propósito del cifrado, para proteger los datos dentro del cifrado (¡siempre que la clave sea segura!), existe una vulnerabilidad muy clara, a la que las contraseñas son especialmente vulnerables a:
Una cadena de entrada dada, encriptada con AES, siempre dará la misma salida.
Esto significa que, si dos usuarios tienen las mismas contraseñas y una está comprometida, la otra también está comprometida automáticamente.
Como ejemplo, digamos que establezco mi contraseña a la contraseña más común: "contraseña". Me sale la cadena cifrada AES. Luego lo cambio a "123456" y obtengo esta cadena cifrada. Gradualmente me abro camino a través de las 10,000 contraseñas principales, generando 10,000 cadenas cifradas (y sus contraseñas no cifradas). No tengo idea de qué clave se usó.
Ahora, voy a otro usuario aleatorio. Existe un 90% de posibilidades de que pueda buscar su contraseña encriptada AES en mi tabla de arco iris, momento en el que puedo ver exactamente cuál es su contraseña.
Los hashes de contraseña también son vulnerables a esto. Esta es la razón por la sal & los pimientos se utilizan normalmente.
Además, para contraseñas más largas, si el primer bloque (16-32 caracteres) de la entrada coincide, entonces el primer bloque de la salida también coincidirá. Entonces, si la contraseña es "Mi nombre de inicio de sesión es AMADANON Inc.", y la contraseña de otra persona es "Mi nombre de inicio de sesión es Harry Cho", y mi contraseña está comprometida, entonces también se conocen los primeros 16 caracteres de su contraseña.
Si bien estos problemas se pueden solucionar, también hay un problema mayor: si alguien obtiene la clave AES, todas las contraseñas son de texto simple. Las claves AES son, inevitablemente, almacenadas muy cerca de las contraseñas encriptadas (en la misma máquina). debe aceptar que, si el malware entra en un servidor con la clave AES y las contraseñas cifradas de AES, están comprometidas.
La única razón para almacenar una contraseña encriptada AES, es en el lado del cliente, si no tiene control del lado del servidor. NUNCA haga esto en el servidor: use un buen hash estándar de una biblioteca estándar, con sal y pimienta.
Si está escribiendo el cliente y el servidor, NO use contraseñas en absoluto. En este punto, no está autentificando un usuario, sino una máquina. Para autenticar una máquina, las contraseñas son la herramienta incorrecta. En su lugar, use la clave pública criptográfica - TLS, por ejemplo, con la autenticación del cliente - nuevamente, ya hay bibliotecas escritas para usted. Si también quiere autenticar al usuario, coloque una contraseña en la clave privada. La clave pública criptográfica tiene las ventajas de que el secreto nunca viaja a través de la red, y el servidor no sabe qué es; Usted prueba que lo tiene sin dárselo al servidor.