Schlagwort-Archive: Python Programmiersprache

Python, ist eine universelle, üblicherweise interpretierte höhere Programmiersprache.

Passwort Pwned überprüfen

Passwort Online in Leak-Datenbank auf Pwned überprüfen

Milliarden von Zugangsdaten sind im Internet im Umlauf, gerade gab ein Leak mit über 770 Millionen Konten Anlass zur Sorge. Wer überprüfen möchte, ob sein eigener Accont sich darunter befindet, kann zur Webseite Have I Been Pwned von Troy Hunt gehen, der Sicherheitsexperte sammelt diese Passwörter und stellt sie in einer Datenbank mit rund 6,5 Milliarden geknackten Accounts und Mail-Adressen zur verfügung.

Passwort Pwned überprüfen

Bei Pwned Passwords gibt man ein Passwort ein, damit erfährt man, ob es sich in der erfassten Leak-Datenbank befindet.

Ein Suchtreffer heisst noch nicht, dass der eigene Account tatsächlich geknackt wurde. Es kann sich auch um Accounts anderer User handeln, die zufällig das selbe Passwort nutzen, und es somit verbrannt ist. Es ist also davon auszugehen, dass das Passwort in den Sammlungen der Hacker ist und es zur Anwendung kommt, und mit Brute-Force-Attacken der Zugang rasch geknackt ist.

Passwort lokal auf Pwned überprüfen

Wie bekanntlich ist es eine schlechte Idee, einer Webseite geheime Passwörter zu verraten, um deren Sicherheit zu überprüfen. Eine elegante Lösung für dieses Problem bietet der Entwickler Hector Martin auf Github. Er nutzt ein Bloom-Filter um die Datenmassen effizient zu durchsuchen. Man benötigt lediglich ein Linux Rechner mit Python 3.x, die Datei bloom.py und die Bloom-Filterliste, die zum Download bereitstehen.

Python Script bloom.py

Nach dem Download des Python Script bloom.py von Hector Martin und der Bloom-Filterlist, führt man im Terminal folgendes Command aus:

$ python3 bloom.py test -s pwned-passwords-2.0-k16.bloom password123
Found

Bei einem komplexen Passwort wird als Resultat „Not found“ wie folgt ausgegeben:

$ python3 bloom.py test -spwned-passwords-2.0-k16.bloom xFw0Nq$K+/
Not found

Den hier gezeigten Passwort Pwned Check wurde auf Fedora 30 (Thirty) Cinnamon Spin mit Python 3 ausgeführt.

CPE OS Name: cpe:/o:fedoraproject:fedora:30
Kernel: Linux 5.0.16-300.fc30.x86_64
Python 3.7.3 (default, Mar 27 2019, 13:36:35) 
[GCC 9.0.1 20190227 (Red Hat 9.0.1-0.8)] on linux

So lässt sich ressourcensparend bestimmen, ob bestimmte Passwörter in einschlägigen Quellen kursieren, ohne den gesamten Passwort-Hash preisgeben zu müssen. Die False-Positive-Rate soll mit pwned-passwords-2.0-k16.bloom bei 0,000015 sein.

  Pwned-Passwörter sind reale Passwörter, die zuvor anhand von Datenschutzverletzungen offengelegt (geknackt) wurden. Aufgrund dieser Gefährdung sind sie für die weitere Verwendung ungeeignet, da das Risiko zur Übernahme anderer Konten sehr wahrscheinlich ist. Das Wort pwned bedeutet das gleiche wie owned. Der englische Ausdruck owned stammt aus der Gaming-Szene und bedeutet, dass jemand besiegt wurde, sinngemäß erwischt, besiegt. Das Wort pwned entstand durch einen Zufall. Da die Buchstaben o und p auf der Tastatur direkt nebeneinander liegen, sorgte ein Tippfehler dafür, dass aus owned pwned wurde, vermultich soll das p auch für Password stehen.

Python Loops mit Break- Continue- Pass

for- und while-Loops auf effiziente Weise für zyklische und automatisierte Aufgaben nutzen

 
Synopsis

Manchmal bestimmen externe Faktoren wie Schleifen in einem Programm durchlaufen werden. Wenn dies eintrifft, möchte man möglicherweise dass die Schleife in einer Routine vollständig beendet wird, oder einen Teil der Schleife überspringt, bevor sie fortfährt, oder es soll ein externer Faktor ignorieren werden. Diese Aktionen können mit der Anweisung breakcontinue und pass durchgeführt werden.

Anweisung break

In Python bietet die break Anweisung die Möglichkeit, eine Schleife zu verlassen, wenn eine externe Bedingung ausgelöst wird. Hierzu setzen wir die break Anweisung in den Codeblock unterhalb der Schleife, normalerweise nach einer bedingten if-Anweisung.

Schauen wir uns ein Beispiel an, das die break Anweisung in einer for-Schleife anwendet:

zahl = 0

for zahl in range(10):
   zahl = zahl + 1

   if zahl == 5:
      break    # break here

   print('Zahl ist ' + str(zahl))

print('loop ende')

In diesem kleinen Programm wird die Variable zahl auf 0 initialisiert. Dann wird eine for-Anweisung in die Schleife gelegt, diese durchläuft solange die Variable zahl kleiner als 10 ist.

Innerhalb der for-Schleife erhöht sich die Zahl bei jedem Durchlauf bedingt um inkrementell 1 zahl = zahl + 1.

Dann bei der if-Anweisung die den Zustand zeigt, wenn die Variable zahl der ganzen Zahl 5 entspricht, wird die Schleife abgebrochen.

Innerhalb der Schleife befindet sich auch eine print() Anweisung, die bei jeder Iteration der for-Schleife ausgeführt wird, bis die Schleife bei der break Anweisung abbricht.

Um zu sehen, wann wir außerhalb der Schleife sind, haben wir eine abschließende print() Ausgabe außerhalb der for-Schleife eingefügt.

Wenn wir diesen Code ausführen, erscheint unsere Ausgabe wie folgt:

Zahl ist 1
Zahl ist 2
Zahl ist 3
Zahl ist 4
loop ende

Es zeigt sich, sobald die Ganzzahl zahl als äquivalent zu 5 bewertet wurde, die Schleife abbricht, da das Programm dies durch die break-Anweisung tun soll.

Die break-Anweisung bewirkt also, dass ein Programm aus einer Schleife ausbricht.

Anweisung continue

Die continue-Anweisung gibt uns die Möglichkeit, den Teil einer Schleife zu überspringen, in diesem eine externe Bedingung ausgelöst wird, aber bis zum Rest der Schleife beendet wird. Das heißt, die aktuelle Iteration der Schleife wird unterbrochen, aber das Programm kehrt zum Anfang der Schleife zurück.

Die continue-Anweisung befindet sich innerhalb des Codeblocks unter der Schleifenanweisung, normalerweise nach einer bedingten if-Anweisung.

Wenn wir das selbe in einem for-Loop wie oben mit der Break-Anweisung anwenden, verwenden wir einfach eine continue-Anweisung anstelle der break-Anweisung:

zahl = 0

for zahl in range(10):
   zahl = zahl + 1

   if zahl == 5:
      continue    # continue here

   print('Zahl ist ' + str(zahl))

print('loop ende')

Der Unterschied bei der Verwendung der continue-Anweisung anstelle einer break-Anweisung besteht darin, dass unser Code trotz der Störung weiter durchläuft, wenn die Variable zahl gleich 5 bewertet wird. Schauen wir uns unsere Ausgabe an:

Zahl ist 1
Zahl ist 2
Zahl ist 3
Zahl ist 4
Zahl ist 6
Zahl ist 7
Zahl ist 8
Zahl ist 9
Zahl ist 10
loop ende

Hier sehen wir, dass die Linie „Zahl ist 5“ nie in der Ausgabe erscheint, aber die Schleife fährt nach diesem Punkt fort, und die Zahlen 6-10 werden ausgegeben, bevor die Schleife verlassen wird.

Mit der continue-Anweisung können in tief verschachtelten Code Fehler vermeiden werden, auch könne hierdurch Loops optimiert werden, indem man häufig auftretende Fälle, die man ablehnen möchten, eliminiert.

Die continue-Anweisung bewirkt, dass ein Programm bestimmte Faktoren überspringt, die innerhalb einer Schleife auftreten, und dann den Rest der Schleife fortsetzt.

Anweisung pass

Wenn eine externe Bedingung ausgelöst wird, kann mit der pass-Anweisung die Bedingung verarbeitet werden, ohne dass die Schleife in irgendeiner Weise beeinträchtigt wird. Der gesamte Code wird weiterhin gelesen, sofern keine break oder eine andere Anweisung auftritt.

Wie bei den anderen Anweisungen befindet sich die pass-Anweisung innerhalb des Codeblocks unter der Schleifenanweisung, normalerweise nach einer bedingten if-Anweisung.

Verwenden wir den gleichen Codeblock wie oben, ersetzen jedoch die Anweisung break oder continue durch eine pass-Anweisung:

zahl = 0

for zahl in range(10):
   zahl = zahl + 1

   if zahl == 5:
      pass    # pass here

   print('Zahl ist ' + str(zahl))

print('loop ende')

Die pass-Anweisung, die nach der if-bedingten Anweisung auftritt, teilt dem Programm mit, die Schleife weiterhin auszuführen und ignoriert die Tatsache, dass die Variable zahl während einer ihrer Iterationen als äquivalent zu 5 bewertet wird.

Wir werden das Programm ausführen und uns die Ausgabe ansehen:

Zahl ist 1
Zahl ist 2
Zahl ist 3
Zahl ist 4
Zahl ist 5
Zahl ist 6
Zahl ist 7
Zahl ist 8
Zahl ist 9
Zahl ist 10
loop ende

Bei Verwendung der pass-Anweisung in diesem Programm stellen wir fest, dass das Programm genauso ausgeführt wird, als wenn es keine bedingte Anweisung im Programm gäbe. Die pass-Anweisung weist das Programm an, diese Bedingung zu ignorieren und das Programm wie gewohnt weiter auszuführen.

Die pass-Anweisung kann minimale Klassen erstellen oder als Platzhalter fungieren, wenn an neuem Code gearbeitet wird und auf einer algorithmischen Ebene gedacht wird, bevor Details herausgearbeitet werden.

Fazit

Durch die break, continue und pass-Aussagen in Python ermöglicht es uns, for– und while-Loops im Code effektiver anwenden zu können.