Python-Passwort-Schutz
Ich bin ein Anfänger also, wenn diese Frage klingt dumm, bitte Geduld mit mir.
Ich Frage mich, dass, wenn wir schreiben Sie den code für Benutzername/Kennwort-check-in python, wenn es nicht kompilierte exe ie script state
, werden die Menschen nicht einfach die Datei öffnen und den code entfernen Trank, tun Sie das Passwort überprüfen?
Ich gehe davon aus, dass das ganze Programm vollständig geschrieben in python
keine C
oder C++
.
Selbst wenn ich ein Programm wie py2exe
es kann leicht dekompiliert zurück zum source-code. Also, heißt das, dass es nutzlos ist, zu tun, ein Kennwort zu überprüfen?
Wie professionelle Programmierer umgehen?
- Können Sie ein Beispiel geben, wenn Sie tun könnten, Passwort-Schutz, rein in ein Python-Programm? In der Regel, wenn Sie ein Kennwort eingeben, es ist der Zugriff auf eine externe Ressource.
- Mit Passwort-Schutz meinen wir, Authentifizierung und Autorisierung, das heißt, das Programm kann ausgeführt werden, indem ein "Benutzer" oder für die Durchsetzung von software-Lizenz, wo Sie wollen, user zu Lizenz kaufen und das Programm überprüft, dass. Ich denke, Durchsetzung von Lizenzen ist wie Ihr darauf hingewiesen, hart in python im speziellen im Vergleich zu sagen wir Java.
- Ich bin ein Anfänger also ich bin mir nicht ganz sicher. Derzeit, was ich habe, ist ein Programm, dass Benutzereingaben erfolgen und Speicherung der Daten in sqlite-Datenbank. Und ich habe eine einfache Passwortabfrage mit hash lib
Du musst angemeldet sein, um einen Kommentar abzugeben.
Edit: Deine geänderte Frage macht klar, dass Sie sich Gedanken über die Menschen Bearbeiten den code zu umgehen, ein Kennwort zu überprüfen. Ja, das ist durchaus möglich. Können Sie liefern Sie Ihren code in .pyc form, aber das wird nicht unbedingt verhindern, dass jemand das dekompilieren und verändern es. Leider, Python ist einfach nicht entwickelt, um zu verhindern, dass code-änderung. Das beste, was Sie tun können ist, führen Sie irgendeine Art der Authentifizierung der Transaktion mit einem sicheren server, so dass egal, wie jemand verändert den code, können Sie nicht umgehen, diesen Schritt zu tun. Abhängig von Ihrer genauen Anwendung, das wäre des guten zuviel.
Dem problem, wie die Verwaltung die Passwort-Authentifizierung ist eine heikle Sicherheitslücke auf, die Menschen verbringen ganze Karriere. Allerdings, hier sind einige Informationen darüber, dass auch davon ausgegangen, dass Sie versuchen, Rollen Sie Ihre eigenen Passwort-Authentifizierung von Grund auf:
Selbst für casual-Passwort-Schutz, als eine Allgemeine Regel, die Benutzer-Passwörter werden nicht gespeichert in einem nur-Text-Format. Statt, in der Regel eine zuverlässige ein-Weg-hash-Funktion wird verwendet, um eine bit-Muster, die nicht ähneln das Passwort. Wenn ein Passwort eingegeben wird, wird die gleiche hash-Funktion angewendet wird und die bit-Muster verglichen werden. Wenn diese identisch sind, ist die Wahrscheinlichkeit Recht hoch, dass das Kennwort richtig eingegeben wurde.
Was unter einer "sicheren" hash-Funktion ist schwierig. Mehrere sind im Allgemeinen Gebrauch, und einige der gemeinsamen hash-Funktionen sind anfällig für bekannte exploits.
Noelkd bietet einige code, der veranschaulicht diesen Ansatz, obwohl die MD5, die seinem code verwendet, ist (glaube ich) eine, die gefährdet ist, in einem Ausmaß, dass es bessere Möglichkeiten gibt. Dieser Artikel bietet auch einige code, etwas ähnliches zu tun:
Die Authentifizierung von Benutzern und Kennwörtern in Python
Wenn Ihr Anliegen ist, speichern Sie das aktuelle Passwort, das Sie passieren müssen, um die SQLite-Datenbank in Klartext, das ist ein anderes problem. Die meisten der Zeit, ich habe gesehen, wie Passwörter in Klartext gespeichert, entweder Skripte oder eine Konfiguration-Datei, und die Anwendung ist so strukturiert, dass Kompromisse das Passwort ist eine Sache von bescheiden Risiko.
Können Sie den hash von dem, was ein Benutzer eingegeben hat vs den Hashwert Ihres Kennworts zu überprüfen, wenn der Benutzer das korrekte Passwort eingegeben, ich habe ein sehr einfaches Beispiel, um dies zu zeigen:
In dem Beispiel, das gehashte Passwort ist
"secretpassword"
die hashes zu"2034f6e32958647fdff75d265b455ebf"
so wie Sie sehen können, auch wenn der Quellcode dekompiliert können Sie trotzdem nur den hash des Passwortes, anstatt den plan, den text des Kennworts.Zu geben, dies ein bisschen ein update für 2016, derzeit wenn Ihr hashing der Passwörter in python geben, die Sie suchen sollten in einer der drei folgenden libs:
passlib
Beispiel genommen hier
bcrypt
django-scrypt
Wenn Sie die Prüfung auf dem Rechner des Nutzers, Sie können den code Bearbeiten, wie Sie mögen, so ziemlich egal was Sie tun. Wenn Sie brauchen Sicherheit, wie dies dann der code ausgeführt werden soll irgendwo unzugänglich, zum Beispiel einem server. "Don' T trust the client" ist ein wichtiger computer-security-Prinzip.
Ich denke, was Sie tun möchten, ist eine server-Skript, das nur den Zugriff durch ein Passwort gegeben, um es durch das client-Programm. Dieses server-Programm funktioniert sehr ähnlich wie das Beispiel-code in anderen Antworten: wenn ein neuer Mandant erstellt wird, schicken Sie ein Klartext-Passwort, um die server, die es ausdrückt, durch ein one-way-Verschlüsselung und speichert Sie. Dann, wenn ein client will, um den code zu verwenden, der den Hauptteil des Programms, senden Sie ein Passwort. Der server stellt diese über die ein-Weg-Verschlüsselung, und sieht, ob Sie mit einem gespeicherten, Hash-Passwörter. Wenn es das tut, führt er den code im Hauptteil des Programms, und sendet das Ergebnis zurück an den Nutzer.
Auf ein Verwandtes Thema, die anderen Antworten vorschlagen, die
md5
Algorithmus. Dies ist jedoch nicht die sicherste Algorithmus - während sicher genug für viele Zwecke, diehashlib
- Modul in der standard-Bibliothek gibt andere, sicherere algorithmen, und es gibt keinen Grund, nicht zu verwenden Sie diese stattdessen.Auf einem server nur server-Administratoren sollten das Recht haben, den code zu ändern. Daher, um den code zu ändern, müssen Sie über Administratorrechte verfügen, und wenn Sie tun, und Sie können eh alles. 🙂
Das gleiche gilt für ein client-Programm. Wenn die einzige Sicherheit ist das Passwort überprüfen, die Sie nicht brauchen, um rund um das Kennwort zu überprüfen, können Sie nur die Daten Lesen, Dateien direkt.
In beiden Fällen, um zu verhindern, dass Personen, die Zugriff auf die Dateien, die aus dem Lesen dieser Dateien eine Passwortabfrage ist nicht genug. Sie haben die Daten zu verschlüsseln.
Beginnen wir mit dem basic jetzt, sollen wir? Während Sie die login-Anmeldeinformationen-Kennwort-Verschlüsselung, sollten wir immer tun, einen Weg-Verschlüsselung. Ein-Weg-Verschlüsselung bedeutet, dass Sie nicht entschlüsseln können, den text, sobald es verschlüsselt ist. Es ist eine Art Verschlüsselung genannt
md5
die sind nur one-way-Verschlüsselung.Gibt es bereits eine Bibliothek, die für Sie in Python genannt
hashlib
.Aus der python-Dokumentation:
Mehr dazu: http://docs.python.org/2/library/hashlib.html?highlight=hashlib#hashlib
Für den Schutz von Daten auf dem client-Rechner, Sie haben es zu verschlüsseln. Zeitraum.
Wenn Sie Vertrauen ein autorisierter Benutzer sind, können Sie eine Passwort-basierte Verschlüsselung-Schlüssel (viele weitere Antworten auf Stack Exchange-Adresse), und hoffe, er ist schlau genug, um seinen computer vor malware.
Wenn Sie nicht Vertrauen auf die autorisierten Benutzer (ein.k.ein. DRM -) Sie sind einfach nur Pech gehabt-finden Sie Sie ein anderes Projekt.;-)
Verbringen ich habe die letzten paar Tage an der Weiterentwicklung dieses und es läuft durch Kennwort-Crackern und es scheint zu halten ziemlich stark.
Hier ist mein code für Sie zu suchen:
Dieser sollte den job tun, für fast alles zu haben, solange Sie optimieren und Ihren Bedürfnissen!!