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
0
Alex Stone 3 sep. 2014 a las 02:18

2 respuestas

La mejor respuesta

El constructor para hashlib.md5 toma una cadena opcional, por lo que no necesita la llamada a .update():

if md5 == hashlib.md5("mypassword").hexdigest():
1
Robᵩ 2 sep. 2014 a las 22:32

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.

1
synthesizerpatel 3 sep. 2014 a las 00:11