2017-05-11 5 views
0

Ich versuche, die ereignisreiche API mit Python3 zu verwenden. In ihrem aktuellen Zustand verwendet die Anmeldefunktion die md5-Bibliothek, die veraltet ist. Folglich möchte ich diese Funktion in Python 3-kompatibel konvertieren. Die Linie, die ich Schwierigkeiten bin vor mit ist:Python3: Ersetzen Sie MD5 durch hashlib

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

Mein Versuch zu konvertieren ist es

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

Leider gibt die API einen Fehler, der besagt, dass entweder die Anmeldung oder das Passwort falsch ist. Allerdings habe ich beide überprüft und es ist in Ordnung. Könnten Sie mir bitte bitte sagen, was mit meinem Code nicht stimmt?

Antwort

1

Hier ist etwas, das Sie wirklich sollte vor der Veröffentlichung versucht haben:

Python 2.7:

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

Python 2.7 und 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' 

Wie Sie sehen können, beide Versionen produzieren der gleiche MD5-Hash. Das Problem liegt also nicht in deinem Code. Es kann sich darauf beziehen, was Sie mit response nach diesem Bit Code tun. Oder vielleicht ist die API korrekt und der Login ist wirklich falsch.

-1

Ihr Code ist korrekt. Wenn Sie hashlib vor md5 hinzufügen und "#" vor dem Import von md5 setzen, wäre das Problem gelöst.

Import hashlib (löschen "import md5" aus der Datei)

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

Es ist besser, wenn Sie den Code in Ihrer Antwort umschreiben, mit Ihren Änderungen enthalten – Michael

Verwandte Themen