Recomiendo cambiar gradualmente a cada usuario al nuevo método de hashing de contraseña en su próximo inicio de sesión. En ese momento, usted conoce su contraseña de texto simple, por lo que puede volver a codificarla con bcrypt y cambiarla a bcrypt. Esto evita la necesidad de un "día de bandera" o ponerse en contacto con todos sus usuarios. De hecho, es invisible para los usuarios: sus usuarios nunca necesitan saber que está haciendo la transición a un nuevo algoritmo hash de contraseña.
En más detalle:
-
Agregue otro campo a la base de datos para indicar qué tipo de algoritmo de hash se usó para calcular el hash de la contraseña. En otras palabras, hay dos campos asociados con cada usuario: uno para el hash de contraseña, y para indicar el algoritmo de hash (SHA512Cng o bcrypt). Inicialmente, el algoritmo de hash de contraseña para cada usuario se inicializa en SHA512Cng.
-
Cuando un usuario intenta iniciar sesión, busque el algoritmo hash de contraseña para su cuenta, haga clic en la contraseña que proporcionó utilizando ese algoritmo y compárelo con el hash almacenado. Si no coincide, el inicio de sesión se rechaza. Si coinciden, se acepta el inicio de sesión.
-
Además, si se aceptó el inicio de sesión y el algoritmo en la base de datos es SHA512Cng, luego vuelva a codificar la contraseña usando bcrypt, sobrescriba el hash de la contraseña con el nuevo hash bcrypt y cambie el algoritmo en la base de datos para bcrypt.
Esto te permite pasar gradualmente al nuevo algoritmo hash de contraseña, a medida que las personas inician sesión en tu servicio.
Opcionalmente, después de algunos meses, si hay usuarios que no han iniciado sesión (y aún así tienen sus contraseñas con SHA512Cng), puede restablecer su contraseña o enviarlas por correo electrónico y solicitar que vuelvan a iniciar sesión. o algo. Sin embargo, en muchos casos esto puede no ser necesario.
P.S. O bien, podría utilizar la elegante solución de Ramhound simplemente de cifrar el hash de contraseña. ¡Listo!