La primera pregunta es, por amor a $ DEITY, ¿por qué utiliza el cifrado de contraseñas? las contraseñas se deben pasar a través de una función de derivación de clave segura y lenta , algo como PBKDF2 o scrypt, y nunca debe almacenarse encriptado de manera reversible. ¡Usar contraseñas cifradas reversiblemente ya es inseguro!
En realidad, la pregunta cero es, ¿por qué estás reinventando la rueda? Si no sabe lo suficiente sobre cómo realizar la autenticación o el cifrado como para hacer una pregunta como esta y para llamar a una IV una "clave", entonces realmente no debería intentar rodar su propio sistema de autenticación. Solo usa uno de los existentes escritos por alguien que sabe lo que están haciendo. Ahorrará tiempo, sus usuarios (¡y administradores!) Estarán más seguros y evitará contribuir a la acumulación de terribles complementos WP que llevan al sitio después de que el sitio se vea comprometido y pierda todos sus detalles de usuario incluidas las contraseñas todo el tiempo.
Si, por alguna razón legítima ( que lo pondría al 90% de confianza que no tiene ), realmente necesita almacenar contraseñas cifradas de manera reversible, todavía está haciendo todo tipo de cosas. de las cosas mal No utilice un IV estático; use un IV único por contraseña (por lo tanto, al igual que con un salt en cualquier esquema de autenticación medio decente, dos usuarios cuyas contraseñas coinciden no tendrán la misma cadena de contraseña cifrada). Definitivamente no ponga ninguna vía (incluso una destinada solo para administradores) que muestre la clave de cifrado de cualquier usuario en cualquier momento y por cualquier motivo. No muestres la IV, tampoco. Para el caso, no muestre la contraseña, incluso en forma cifrada. Cada vez que agrega una funcionalidad peligrosa como esa, hace que sea más fácil para un atacante comprometer su sitio o perder todas sus credenciales de usuario.
Si absolutamente debes hacer cosas tan terribles (y estoy usando "must * en el sentido de" está en el contrato, y si no lo hago exactamente de esa manera, no lo hago. no se me paga, y no hay nadie con quien pueda hablar sobre la terrible idea que esto tiene "), todavía no deberías hacerlo tú mismo. Usa un módulo existente escrito por otra persona o busca a alguien que esté más familiarizado con la web Seguridad de la aplicación de lo que eres para escribir la tuya.
Probablemente no tenga sentido hacerlo realmente seguro en este momento (a menos que sepa mucho más sobre la seguridad de la aplicación web que lo que parece; para una prueba básica, si digo "CSRF", ¿sabe a qué me refiero sin buscándolo?) pero no hay espacio suficiente en una respuesta de StackOverflow para explicar todas las cosas que necesitas saber para hacer eso. OWASP es un lugar decente para comenzar a educarte sobre eso. Aquí está su página en almacenamiento de contraseñas .