2017-05-11 2 views
0

J'essaie d'utiliser l'API mouvementée avec Python3. Dans son état actuel, la fonction de connexion utilise la bibliothèque md5 qui est dépréciée. Par conséquent, je voudrais convertir cette fonction pour être compatible avec Python 3. La ligne que je suis confronté à des difficultés avec est:Python3: remplacez md5 par hashlib

response = md5.new(nonce + ':'+ md5.new(password).hexdigest()).hexdigest() 

Mon essayer de le convertir est

mpwd = hashlib.md5(password.encode()) 
    apwd = mpwd.hexdigest() 
    s = nonce+":"+apwd 
    mall = hashlib.md5(s.encode()) 
    response = mall.hexdigest() 

Malheureusement, l'API renvoie une erreur qui dit que soit le login ou le mot de passe est incorrect. Cependant, j'ai vérifié les deux et c'est ok. Alors pourriez-vous s'il vous plaît me dire ce qui ne va pas avec mon code s'il vous plaît?

Répondre

1

Voici quelque chose que vous devriez vraiment avoir essayé avant de poster:

Python 2.7:

>>> import md5 
>>> password = 'fred' 
>>> nonce = '12345' 
>>> md5.new(nonce + ':'+ md5.new(password).hexdigest()).hexdigest() 
'496a1ca20abf5b0b12ab7f9891d04201' 

Python 2.7 et Python 3.6:

>>> import hashlib 
>>> password = 'fred' 
>>> nonce = '12345' 
>>> mpwd = hashlib.md5(password.encode()) 
>>> apwd = mpwd.hexdigest() 
>>> s = nonce+":"+apwd 
>>> mall = hashlib.md5(s.encode()) 
>>> mall.hexdigest() 
'496a1ca20abf5b0b12ab7f9891d04201' 

Comme vous pouvez le voir, les deux versions produisent des le même hachage md5. Donc le problème n'est pas avec votre code. Cela peut correspondre à ce que vous faites avec response après ce bit de code. Ou peut-être l'API est correcte et la connexion est vraiment erronée.

-1

Votre code est correct. Si vous ajoutez hashlib avant md5 et mettez "#" avant d'importer md5, le problème sera résolu.

importation hashlib (supprimer "md5 import" du fichier)

def login(self, user, password): 
    "Login to the Eventful API as USER with PASSWORD." 
    nonce = self.call('/users/login')['nonce'] 
    response = hashlib.md5.new(nonce + ':'+ hashlib.md5.new(password).hexdigest()).hexdigest() 

    login = self.call('/users/login', user=user, nonce=nonce, 
         response=response) 
    self.user_key = login['user_key'] 
    self.user = user 
    return user 
+0

Il est préférable si vous repassez le code dans votre réponse, avec vos changements inclus – Michael