Obtuve el siguiente código que compara un hash MD5 de una llamada de servicio web con una contraseña almacenada localmente (que se recuperará de una base de datos). ¿Existe una forma mejor o más segura de hacer comprobaciones de igualdad de cadena MD5 en python? ¿Quizás hashlib tiene una función que puede tomar dos argumentos y devolver verdadero / falso?
md5 = request.values.get('md5')
m = hashlib.md5()
m.update("mypassword")
md5Python = m.hexdigest()
if md5Python == md5:
#return success
#return fail
2 respuestas
El constructor para hashlib.md5
toma una cadena opcional, por lo que no necesita la llamada a .update()
:
if md5 == hashlib.md5("mypassword").hexdigest():
En lugar de recuperar la contraseña de la base de datos para compararla, ¿hash la contraseña que obtienes del usuario y haces que el hash sea parte de tu consulta de usuario?
select uid from users WHERE username = 'joe@foo.com' AND password = '<hash>';
De esa manera, nunca cargue la contraseña hash real en la aplicación y la exponga potencialmente. Si carga todo el registro de usuario en la aplicación, aumenta el potencial de fuga de información y de alguna manera derrota el punto completo de los hash de contraseña.
Además, use AES-512 o AES-256: md5 ya no es lo suficientemente bueno.
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.