bcrypt.checkpw gibt TypeError: Unicode-Objekte müssen codiert werden, bevor Sie
Rufe ich bcrypt.checkpw
zu überprüfen unverschlüsselte Passwort passt mit Hash gespeicherte Passwort in der Datenbank für Anmeldeinformationen, erhalten aber
TypeError: Unicode-Objekte müssen codiert werden, bevor Sie
Wie sollte ich dieses Problem beheben? Jede Anregung?
Ich installierte python 2.7.6
, und bcrypt 3.1.1
Ich habe den folgenden code:
def check_password(password, hashed_password)
if not bcrypt.checkpw(password, hashed_password):
raise InvalidCredentials("403 Forbidden")
else:
return true
Und erhalten die folgende Fehlermeldung:
Datei "/home/qt/virtualenv/lib/python2.7/site-packages/bcrypt/init.py", line 100, in checkpw
raise TypeError("Unicoed-Objekte müssen codiert werden, bevor Sie")
TypeError: Unicode-Objekte müssen codiert werden, bevor Sie
Schaute ich in bcrypt/__init__.py
, aber ich bin mir nicht sicher, warum
def checkpw(password, hashed_password):
if (isinstance(password, six.text_type) or
isinstance(hashed_password, six.text_type)):
raise TypeError("Unicode-objects must be encoded before checking")
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich davon aus, dass Sie die Verwendung von Python 3. Mit Python 3, strings sind standardmäßig die unicode-Zeichenfolgen.
Wenn Sie rufen Sie die
bcrypt.checkpw()
Funktion mit unicode-Werten:Du bekommst diese Ausnahme
Der Grund ist einfach: kryptographische Funktionen arbeiten nur auf Byte-strings (oder arrays in der Tat).
Du Passwort und hashed_password, müssen sowohl Byte-strings.
Wenn Sie die
bcrypt.hashpw()
Funktion, Ihre hashed_password muss ein Byte-string, und ich denke, das problem ist für die Passwort Wert. Diese Passwort kommen müssen, die aus einem HTML-Formular, der etwas ähnliches. Die Verwendung derbcrypt.checkpw()
- Funktion, müssen Sie zuerst Kodieren Sie den string-Wert mit der gleichen Codierung, die Sie verwenden, um zu verschlüsseln das Passwort mit derbcrypt.hashpw()
Funktion. Normalerweise wählen wir 'utf8' - Codierung.Zum Beispiel (Python 2 & 3):
Sehen, die einfache Nutzung auf Gihub Seite
u"foo"
, oder konvertieren Sie die Byte-Zeichenfolge in unicode mitdecode()
Methode. Die unicode-Zeichenfolgen kommen sollte, von deinem HTML-Formular-oder ähnlichen Eingang : das ist der klassische (und erwartete) Verhalten.Etwas, das Sie tun konnte, wie diese
einfach ist es
ich so etwas wie, dass