Wissen Python-Projekte - Die Onleihe

Die Seite wird erstellt Dastin Krüger
 
WEITER LESEN
Wissen Python-Projekte - Die Onleihe
wissen
                              Python-Projekte
                              Anleitungen • Grundlagen • Hintergründe
c Python-Projekte

                                                                              l.de
                    Intelligent

                                                                          ecia
                                                                         .ctsp
                     Bilder skalieren mit künstlicher Intelligenz

                                                                        www
                     Eigenen Telegram-Bot programmieren
                     Objekte erkennen mit Lego Mindstorms

                    Kreativ
                     Text-Adventure selbst entwickeln
                     Lasershow-Animationen erzeugen
                     Elektronische Musik komponieren

                    Nützlich
                    Twitter und Reddit steuern
                    Doodle-Clone mit Django
                    Texte verschlagworten

                    Clever coden
                    Von Anfänger bis Profi:
                    So erleichtern Sie Ihren Alltag mit Python
Wissen Python-Projekte - Die Onleihe
bauen, um auszuprobieren, wie die Programmier-             wenn ein Angreifer das Salz kennt, müsste er einen
sprache reagiert. Bei einer Exception gibt Python          hohen Aufwand treiben, um aus dem Passwort
standardmäßig ein Traceback aus. Darin steht ganz          einer Domain das Masterpasswort zu berechnen.
unten die Stelle, an der der Fehler wirklich aufgetre-     Auf einem i5 mit 3ˇGHz dauert die Berechnung
ten ist. Darüber stehen alle Aufrufe, die an diesem        eines einzelnen Passworts gerade mal 0,04ˇs. Für
Code beteiligt waren. Werden einer Funktion Para-          das Knacken eines 10 Zeichen langen Masterpass-
meter des falschen Typs übergeben, tritt der Fehler        worts hingegen bräuchte der chinesische Super-
zwar innerhalb der Funktion auf. Die Fehlerquelle          computer Tianhe-2 mit einer Brute-Force-Attacke
liegt aber in dem Aufruf, den das Traceback direkt         schätzungsweise 5000 Jahre. Ist das Masterpass-
darüber anzeigt. Vertauschen Sie mal beim Aufruf           wort nur halb so lang, wäre er wahrscheinlich in
von convert_bytes_to_password die Parame-                  weniger als einer Minute fertig. Denken Sie sich
ter und führen Sie das Programm aus, um die Fol-           also ein Masterpasswort mit ausreichend vielen
gen zu beobachten.                                         Zeichen aus.
   Der Typ einer Exception sagt viel darüber aus, wo          Für die meisten Domains wird die Standardein-
der Fehler liegen könnte. „SyntaxError“ deutet auf         stellung eines 10 Zeichen langen Passworts mit
einen falsch formatierten Quelltext hin oder auf           Sonderzeichen ausreichen. Mit demselben Master-
einen Tippfehler. Wenn Sie beispielsweise ein              passwort erzeugt die vorgestellte Version c’t
while in wile ändern, zeigt Python Ihnen sofort, in        SESAM auf allen Rechnern dieselben Passwörter
welcher Zeile der Fehler steht. Bei einem „TypeEr-         zu den gleichen Domains. Wenn Sie bei gleichem
ror“ wurde vermutlich eine Variable mit dem fal-           Domainnamen und Masterpasswort trotzdem an-
schen Datentyp übergeben. Diesen Fehler produ-             dere Passwörter erzeugen wollen, ändern Sie das
zieren Sie beispielsweise, wenn Sie die Parameter          Salz auf einen anderen Wert. Auf diese Weise er-
von convert_bytes_to_password vertauschen.                 zeugen Sie Ihr ganz persönliches SESAM. Wenn Sie
   Die Meldung „TypeError: 'int' object is not iterable“   Ihr SESAM auf verschiedenen Geräten einsetzen
teilt Ihnen mit, dass int.from_bytes() einen Da-           wollen, müssen Sie auf allen Geräten das gleiche
tentyp erwartet, der wie eine Liste aus einzelnen          Salz einstellen, damit dieselben Passwörter ent-
Elementen besteht. Im Traceback steht, in welcher          stehen.
Reihenfolge Sie die Parameter an die Funktion über-           Für die Domain sollten Sie sich eine Methode
geben haben. „IndexError“ deutet darauf hin, dass          überlegen, wie Sie von der URL auf die Domain
das Programm eine größere Liste erwartet hat. Schrei-      kommen. Ob Sie „www.paypal.com“, „paypal.com“
ben Sie mal password_characters[85] hinter die             oder lieber nur „paypal“ bei der Domain eintragen,
Definition von password_characters und führen               hängt von Ihrer Vorliebe ab. Der Passwort-Manager
das Programm aus, um diesen Fehler zu provozieren.         generiert für jede Variante unterschiedliche Pass-
   Sollten Sie auf unerwartete oder unverständli-          wörter.
che Fehler stoßen, hilft das Internet weiter. Wenn            Manche Websites akzeptieren keine Sonderzei-
Sie den Text einer Fehlermeldung in eine Suchma-           chen oder begrenzen die Länge des Passworts. In
schine eingeben, fördert das in vielen Fällen Bei-         diesem Fall können Sie das Programm kurzzeitig
träge von Programmierern zutage, die das gleiche           abändern und die Sonderzeichen aus den pass-
Problem hatten und deren Fragen schon beantwor-            word_characters ausklammern oder die Länge in
tet wurden. Suchen Sie dabei nach dem allgemei-            der letzten Zeile anpassen. Sollten Sie für eine Do-
nen Typ des Fehlers, lassen Sie aber Eigenheiten           main ein neues Passwort brauchen, können Sie die
des eigenen Programms wie den Traceback und Va-            Iterationszahl im Aufruf von pbkdf2_hmac um 1 er-
riablen- oder Funktionsnamen weg. Beginnt eine             höhen. Da alle vorherigen Passwörter mit den
Zeile mit einem #, interpretiert Python sie als Kom-       alten Einstellungen erzeugt wurden, sollten Sie
mentar und führt sie nicht aus. Damit können Sie           das Programm nach diesem Sonderfall wieder auf
sich Notizen im Quelltext machen oder schnell mal          die alten Einstellungen zurückändern. Außerdem
eine Zeile deaktivieren.                                   sollten Sie sich notieren, welche Passwörter mit
                                                           anderen Einstellungen erzeugt wurden, damit Sie
c’t SESAM benutzen                                         immer das passende Passwort erzeugen. Da die             Quelltext, iPython-
                                                           Einstellungen einem Angreifer nur wenig nützen,             Notebook:
c’t SESAM ist kein reines Anfängerbeispiel: Das Pro-       können Sie Ihre Notizen auf einem Zettel notieren          www.ct.de/wfrv
gramm generiert sehr sichere Passwörter. Selbst            oder bei einem Cloud-Dienst ablegen. (pmk) c

16    Python als Alltagshelfer                                                                                    c’t wissen Python-Projekte (2018)
Wissen Python-Projekte - Die Onleihe
Wissen Python-Projekte - Die Onleihe
Python-FAQ
                 Von Pina Merkert

Python 2 oder 3                                         ihrem Windows-Installer auch alle Abhängigkeiten
                                                        für den wissenschaftlichen Einsatz von Python unter.
˙ken habe ich aber gehört, dass sie nur mit Py-
     Python 3 ist moderner, von einigen Bibliothe-

thon 2 laufen. Sollte man mit Version 2.7 oder 3.x      Paketverwaltung wählen
entwickeln?
                                                        ˙ger des Systems installieren oder über pip?
                                                           Sollte man Bibliotheken über den Paket-Mana-

ß   Die Frage stellt sich durchaus, da Python 3 nicht
    vollständig abwärtskompatibel zu Python 2 ist.
Da aber alle wichtigen Bibliotheken und Frame-
works mittlerweile mit Python 3 laufen, können Sie
                                                        ßkete
                                                         Der Python-Paketmanager         installiert Pa-
                                                                                         pip
                                                              aus dem Python Package Index (PyPi) und
                                                        nicht aus den Paketquellen des Systems. Die Paket-
im Normalfall getrost auf die neuere Version set-
                                                        manager der Linux-Distributionen und Homebrew
zen. Ein weiteres Argument für den Nachfolger ist,
                                                        auf dem Mac erwarten aber die Versionen der Python-
dass einige Programme wie Blender kein Python 2
                                                        Pakete aus ihren eigenen Quellen, die oft etwas
mehr unterstützen.
                                                        älter sind. Darüber hinaus berücksichtigen die Pip-
   Über Imports aus dem future-Modul können Sie
                                                        Pakete keine automatischen Sicherheitsaktualisie-
Programme schreiben, die mit beiden Versionen der
                                                        rungen.
Sprache laufen. Dann empfiehlt es sich, mit Python
                                                           Da Python-Programme zu vielen Linux-Systemen
3 zu entwickeln und hin und wieder mit Python 2 zu
                                                        gehören, riskieren Sie Probleme, wenn Sie deren
prüfen, ob der Code mit dem alten Interpreter noch
                                                        Abhängigkeiten an der Paketverwaltung vorbei mit
korrekt läuft. Die beiden Versionen lassen sich auf
                                                        pip aktualisieren. Hier sollten Sie immer die Ver-
allen Betriebssystemen parallel installieren.
                                                        sion verwenden, die das Linux installiert. Werden
                                                        die Abhängigkeiten nur von Ihren selbst entwickel-
Python unter Windows                                    ten Programmen benutzt, entschärft sich die Pro-
                                                        blematik. Aber auch hier erspart es Probleme, wenn
˙liefert. Welche Python-Distribution sollte man
     Windows wird ohne Python-Interpreter ausge-
                                                        Sie mit apt & Co. statt pip installieren. Sollte das
                                                        Betriebssystem ein von Ihnen benötigtes Paket
installieren?
                                                        nicht bereitstellen, kommen Sie an pip allerdings

ß   Normalerweise genügt das offizielle Installa–
    tionspaket von python.org. Falls Sie jedoch in
C implementierte Bibliotheken wie Numpy benöti-
                                                        nicht vorbei. Dann sollten Sie aber auch ein Virtua-
                                                        lenv installieren.

gen, wird die Installation unter Windows etwas          Virtuelle Umgebung
komplizierter. Zwar bringt auch Python für Windows

                                                        ˙Virtual Environment (Virtualenv) erstellen?
den Paketmanager pip mit. Der muss für die Instal-         Sollte man zum Entwickeln grundsätzlich ein
lation von Numpy aber denselben C-Compiler an-
werfen, mit dem auch Python kompiliert wurde. Mi-
crosoft bietet ein für Python 2.7 passendes Paket
an, für Python 3.6 müssten Sie aber Visual C++ 14 in-
                                                        ßEin  Virtualenv ist eine abgeschottete Arbeits-
                                                         umgebung, in der     pipbeliebige Python-Pakete
                                                        installieren kann, ohne außerhalb laufende Python-
stallieren (siehe ct.de/wh6z).
                                                        Programme zu stören. Python 2 erstellt die Umge-
   Python-Distributionen wie Anaconda bringen
                                                        bung mit dem Programm virtualenv; Python 3 ver-
gleich das komplette Paket aus Python-Interpreter
                                                        wendet das Modul venv:
und vorkompilierten Bibliotheken wie Numpy oder
Scipy mit. Die freie Python-IDE Spyder bringt in        python 3 -m venv env

18    Python als Alltagshelfer                                                                                 c’t wissen Python-Projekte (2018)
Wissen Python-Projekte - Die Onleihe
Ob ein Virtualenv                   Daraufhin liegt eine Kopie des Python-Interpreters
aktiviert ist, erkennen             samt pip im Verzeichnis env/. Sie können dem Ver-
Sie an dessen Namen                 zeichnis einen beliebigen Namen geben, „env“ ist
in Klammern am                      aber Standard und damit beispielsweise in GitHubs
Anfang des Prompts.                 .gitignore für Python enthalten. Die geschaffene
                                    Umgebung aktiviert unter Linux und Mac OS der
                                    Befehl
                                    source env/bin/activate

                                    Unter Windows macht das folgendes Script:
                                    env\Scripts\activate

                                    Wenn Sie danach Pakete mit pip installieren, landen
                                    diese nur innerhalb des Virtualenv. Ihr Programm
                                    verwendet sie aber genau wie systemweit instal-
                                    lierte Bibliotheken. Das verhindert Versionskonflikte,
                                    wenn unterschiedliche Programmierprojekte auf un-
                                    terschiedliche Versionen der gleichen Bibliothen zu-
                                    greifen. Sie verlassen das Virtualenv mit
                                    deactivate

                                    ˙tualenv?
                                        Wie aktualisiert man alle Pakete in einem Vir-

                                    ßVirtualenvs kommen beispielsweise bei Django-
                                     Projekten auf Webservern und damit auch in
                                    Produktivsystemen vor. An dieser Stelle vermisst
                                    man automatische Systemupdates. Leider bietet
                                    pip keine Funktion, um alle PyPi-Pakete auf
                                    dem neuesten Stand zu halten. Mit etwas Shell-
                                    Magie aktualisiert pip aber trotzdem alle Pakete
                                    im Virtualenv:
                                    pip install --upgrade pip
                                    pip freeze --local | grep -v '\-e' | :
                                                             .cut -d = -f 1 | :
                                                      .xargs -n1 pip install -U

                                    Da die zwei Befehle alle Python-Pakete auf die ak-
   Python-Compiler für              tuelle Version aktualisieren, eignen sie sich auch,
        Windows                     um bei längeren Programmierprojekten mit der Zeit
      www.ct.de/wh6z                zu gehen und immer mit aktuellen Versionen zu
                                    testen.                                   (pmk) c

c’t wissen Python-Projekte (2018)                                Python als Alltagshelfer   19
Wissen Python-Projekte - Die Onleihe
c’t SESAM objekt–
                orientiert erweitern
                Für den Python-Crashkurs haben wir einen Passwort-Manager namens
                c’t SESAM programmiert. An einer erweiterten Version lernen Sie jetzt
                Grundsätze objektorientierter Programmierung, den Import eigener
                Module, Lesen und Schreiben von Dateien, Verschlüsselung mit AES
                und einen Hauch Fehlerbehandlung.

                Von Pina Merkert

U
       nser Crashkurs-Beispiel c’t SESAM berechnet      ken und auch Passwörter sicher speichern, die sie
       in nur 22 Zeilen Python-Code aus einem Mas-      nicht aus dem Masterpasswort berechnen kann.
       terpasswort und einer Domain sichere Pass-          Zusätzlich war es uns wichtig, alle Passwörter –
wörter (siehe Seite 6). Für den Alltagseinsatz ist es   auch das Masterpasswort – ändern zu können.
allerdings niemandem zuzumuten, die Einstellun-         Damit das geht, darf c’t SESAM die Passwörter nicht
gen für jede Domain im Kopf zu behalten. Die erwei-     mehr direkt aus dem Masterpasswort berechnen,
terte Version soll sich deshalb Einstellungen mer-      da sie sich sonst alle mit jedem neuen Masterpass-

20   Python als Alltagshelfer                                                                                 c’t wissen Python-Projekte (2018)
Sie können auch lesen