Wie benutzt man Bcrypt, um Passwörter in Django zu verschlüsseln

Ich versuche, Bcrypt zu verwenden, um Passwörter zu verschlüsseln, die Benutzer bei der Registrierung zur Verfügung stellen und dann Bcrypt verwenden, um ein Passwort zu validieren, das ein Benutzer bei der Anmeldung gegen die in der Datenbank gespeicherte Hash-Version bereitstellt.

Es gibt einige ziemlich gute Dokumentation über die Installation von Bcrypt über die Django- Dokumente , aber sie zeigen Ihnen nicht, wie Sie Bcrypt verwenden, um Hash-Passwörter zu verwenden oder andere Befehle zu verwenden.

Müssen Sie Brcrypt irgendwo importieren? Wenn ja, was ist die richtige Syntax dafür? Was ist die Syntax für das Hashing Passwörter und das Vergleichen von Hash-Passwörtern gegen Nicht-Hash-Passwörter?

Ich habe die Bcrypted-Bibliothek in der settings.py-Datei installiert und auch Bcrypt über Pip installiert. Was muss ich noch tun, um Bcrypt zu benutzen?

2 Solutions collect form web for “Wie benutzt man Bcrypt, um Passwörter in Django zu verschlüsseln”

Bei deinem Link:

Das Kennwortattribut eines Benutzerobjekts ist ein String in diesem Format:

<algorithm>$<iterations>$<salt>$<hash> Das sind die Komponenten, die zum Speichern eines Benutzerkennworts verwendet werden , getrennt durch das Dollarzeichenzeichen und bestehen aus: dem Hash-Algorithmus, der Anzahl der Algorithmus-Iterationen (Arbeitsfaktor) , Das zufällige Salz und das daraus resultierende Passwort Hash. Der Algorithmus ist einer von einer Reihe von Einweg-Hashing oder Passwort-Speicher-Algorithmen Django verwenden können; siehe unten. Iterationen beschreiben, wie oft der Algorithmus über den Hash läuft. Salz ist die zufällige Samen verwendet und der Hash ist das Ergebnis der Einweg-Funktion.


Ich habe die Bcrypted-Bibliothek in der settings.py-Datei installiert … Was muss ich noch tun, um Bcrypt zu benutzen?

Ich bin mir nicht sicher, was der erste Satz bedeutet. Du musst folgendes in settings.py :

 PASSWORD_HASHERS = ( 'django.contrib.auth.hashers.BCryptSHA256PasswordHasher', 'django.contrib.auth.hashers.BCryptPasswordHasher', 'django.contrib.auth.hashers.PBKDF2PasswordHasher', 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', 'django.contrib.auth.hashers.SHA1PasswordHasher', 'django.contrib.auth.hashers.MD5PasswordHasher', 'django.contrib.auth.hashers.CryptPasswordHasher', ) 

Verwenden Sie Bcrypt, um ein Passwort zu validieren, das ein Benutzer bei der Anmeldung über die in der Datenbank gespeicherte Hash-Version zur Verfügung stellt.

Sie können das manuell tun:

Das Modul django.contrib.auth.hashers bietet eine Reihe von Funktionen zum Erstellen und Überprüfen von Hash-Passwort. Sie können sie unabhängig vom User-Modell verwenden.

Check_password (Passwort, codiert)
Wenn Sie einen Benutzer manuell authentifizieren möchten, indem Sie ein Klartext-Passwort mit dem Hash-Passwort in der Datenbank vergleichen, verwenden Sie die Bequemlichkeitsfunktion check_password (). Es dauert zwei Argumente: das Plain-Text-Passwort zu überprüfen, und den vollen Wert eines Benutzer-Passwort-Feld in der Datenbank zu überprüfen, und gibt True zurück, wenn sie passen, False anders.

https://docs.djangoproject.com/de/1.9/topics/auth/passwords/#module-django.contrib.auth.hashers

Oder Sie können authenticate() :

Authentifizieren (** Anmeldeinformationen)
Um einen bestimmten Benutzernamen und ein Passwort zu authentifizieren, verwenden Sie authenticate (). Es nimmt Anmeldeinformationen in Form von Keyword-Argumenten, für die Standardkonfiguration dies ist Benutzername und Passwort, und es gibt ein User-Objekt zurück, wenn das Passwort für den angegebenen Benutzernamen gültig ist. Wenn das Kennwort ungültig ist, gibt authenticate () keine aus. Beispiel:

 from django.contrib.auth import authenticate user = authenticate(username='john', password='password to check') if user is not None: # the password verified for the user if user.is_active: print("User is valid, active and authenticated") else: print("The password is valid, but the account has been disabled!") else: # the authentication system was unable to verify the username and password print("The username and password were incorrect.") 

https://docs.djangoproject.com/de/1.9/topics/auth/default/#authenticating-users

Hier sind einige Beispiele:

 (django186p34)~/django_projects/dj1$ python manage.py shell Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 23 2015, 02:52:03) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from django.conf import settings >>> print(settings.PASSWORD_HASHERS) ('django.contrib.auth.hashers.PBKDF2PasswordHasher', 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', 'django.contrib.auth.hashers.BCryptSHA256PasswordHasher', 'django.contrib.auth.hashers.BCryptPasswordHasher', 'django.contrib.auth.hashers.SHA1PasswordHasher', 'django.contrib.auth.hashers.MD5PasswordHasher', 'django.contrib.auth.hashers.UnsaltedSHA1PasswordHasher', 'django.contrib.auth.hashers.UnsaltedMD5PasswordHasher', 'django.contrib.auth.hashers.CryptPasswordHasher') 

Das sind die Vorgaben: Es gibt keinen Eintrag in meine settings.py für PASSWORD_HASHERS .

 >>> from django.contrib.auth.models import User >>> my_user = User.objects.create_user('ea87', 'ea@gmail.com', '666monkeysAndDogs777') >>> my_user.save() >>> my_user.password 'pbkdf2_sha256$20000$L7uq6goI1HIl$RYqywMgPywhhku/YqIxWKbpxODBeczfLm5zthHjNSSk=' >>> my_user.username 'ea87' >>> from django.contrib.auth import authenticate >>> authenticate(username='ea87', password='666monkeysAndDogs777') <User: ea87> >>> print(authenticate(username='ea87', password='wrong password')) None >>> from django.contrib.auth.hashers import check_password >>> check_password('666monkeysAndDogs777', my_user.password) True >>> exit() 

Als nächstes fügte ich folgendes zu settings.py hinzu:

 PASSWORD_HASHERS = ( 'django.contrib.auth.hashers.BCryptSHA256PasswordHasher', 'django.contrib.auth.hashers.BCryptPasswordHasher', 'django.contrib.auth.hashers.PBKDF2PasswordHasher', 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', 'django.contrib.auth.hashers.SHA1PasswordHasher', 'django.contrib.auth.hashers.MD5PasswordHasher', 'django.contrib.auth.hashers.CryptPasswordHasher', ) 

 (django186p34)~/django_projects/dj1$ python manage.py shell Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 23 2015, 02:52:03) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from django.conf import settings >>> print(settings.PASSWORD_HASHERS) ('django.contrib.auth.hashers.BCryptSHA256PasswordHasher', 'django.contrib.auth.hashers.BCryptPasswordHasher', 'django.contrib.auth.hashers.PBKDF2PasswordHasher', 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', 'django.contrib.auth.hashers.SHA1PasswordHasher', 'django.contrib.auth.hashers.MD5PasswordHasher', 'django.contrib.auth.hashers.CryptPasswordHasher') 

Beachten Sie die bcrypt Hirten an der Vorderseite des Tupels.

 >>> from django.contrib.auth.models import User >>> user = User.objects.get(username='ea87') >>> user <User: ea87> >>> user.password 'pbkdf2_sha256$20000$DS20ZOCWTBFN$AFfzg3iC24Pkj5UtEu3O+J8KOVBQvaLVx43D0Wsr4PY=' >>> user.set_password('666monkeysAndDogs777') >>> user.password 'bcrypt_sha256$$2b$12$QeWvpi7hQ8cPQBF0LzD4C.89R81AV4PxK0kjVXG73fkLoQxYBundW' 

Sie können sehen, dass das Passwort in eine bcrypt-Version geändert wurde.

Kurze Version von 7studs Antwort

Auf dem Django 1.9 Standardvorlagenprojekt verwenden Sie create_user :

 User.objects.create_user(username='uname', password='mypass') 

Anstatt zu create , was das Passwort nicht hat.

Eine weitere Möglichkeit besteht darin, das Passwort mit:

 user = User(username='uname') user.set_password('mypass') user.save() 

Schließlich könntest du auch auf Strings wie auf: Wie schnell verschlüsseln eine Passwort-String in Django ohne ein User Model?

  • Entschlüsseln von Daten in Python, die in Java von Java verschlüsselt wurden
  • Verschlüsselung einer JPG-Datei mit picrypro's AES fehlgeschlagen
  • Was ist der Unterschied zwischen Blowfish und Blowfish-Compat?
  • Einfache Möglichkeit, einen String nach einem Passwort zu codieren?
  • Obfuscate Strings in Python
  • Python crypt in OSX
  • Fügen Sie Nonce und Block zählen in PyCrypto AES MODE_CTR
  • Python File Encryption
  • Python Blowfish Verschlüsselung
  • Emulieren von SSHs SOCKS Proxy Tunnel in Python
  • Wie man PGP in Python macht (Schlüssel generieren, verschlüsseln / entschlüsseln)
  • Python ist die beste Programmiersprache der Welt.