Passwort aus Datei auslesen und vergleichen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@mr-evil1: Das hat das `xbmc`-Modul schon irgendwie verraten – und das ändert nichts daran wie die Programmiersprache Python funktioniert.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
mr-evil1
User
Beiträge: 35
Registriert: Montag 11. März 2019, 10:48

Also ist es nicht möglich, Passwörter aus einer passw.csv Datei auszulesen und mit der Tastatureingabe zu vergleichen?
Hab schon vieles versucht. Es funktioniert aber nur immer mit dem ersten Wort in der Datei.

ZB passw.csv:

123;345;678;91011;121314 ;

Ich hätte gerne dass alle diese zu einem Password = True führen
Und alles was nicht in der Liste ist zu eunem Password = False

Ich schaffe es einfach nicht. Habe schon alle Firen danach abgesucht.
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Beantworte doch erst einmal __blackjacks__ Frage warum sein Code nicht funktioniert.
Man baut ja ein Haus auf einem vernünftigen Fundament.

Und dann dann zeigst du den Code, der nur das erste Passwort akzeptiert.

Solange du hier alles ignorierst, was die helfen soll, wirst du auch nicht voran kommen.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

NAtürlich ist das möglich. Aber Du hast noch immer nicht gezeigt, was Du bereits versucht hast.
Ein Problem teilt man am besten in kleine Teilprobleme, die einfach zu lösen sind. Hier ist es, das Lesen der Passwortdatei, und das vergleichen mit vielen Passwörtern.
mr-evil1
User
Beiträge: 35
Registriert: Montag 11. März 2019, 10:48

Ok. Hier ein Beispiel von mir, aus der Konsole mit nur 4 Passwörter aus der Datei.

Code: Alles auswählen

import csv
answer = input("Do you have an account?(yes or no) ")
if answer == 'yes' :
    login = False
    csvfile = open("/storage/emulated/0/passw.csv","r")
    reader = csv.reader(csvfile, delimiter=';')
    for row in reader:
        for heading in ['password: ', '2 more attempts:   ', 'last attempt:   ']:
            password = input(heading)
            if row[0] == password:
                login = True
                break
            elif row[1] == password:
                login = True
                break
            elif row[2] == password:
                login = True
                break
            elif row[3] == password:
                login = True
                break
            else:
                login = False
        if login == True:
            print("You are now logged in!")
            break
        else:
            print("3 times incorrect password.")
            exit()
else:
    print('Only with password.')
    exit()
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Und was gefällt Dir an dieser Lösung nicht?
Statt viermal den selben Code zum Prüfen des Passworts zu kopieren, würde man eine Schleife verwenden. Die äußerste for-Schleife wird exakt einmal durchlaufen, ist also keine Schleife.

Mir ist immer noch nicht klar, warum Du mehrere Passwörter hast?
mr-evil1
User
Beiträge: 35
Registriert: Montag 11. März 2019, 10:48

Genau das mit der Schleife wäre eine gute Idee.
Wie würde der Code dann aussehen?

Bezüglich Passwörter: Mehrere Personen erhalten ein anderes Passwort.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

JA aber dazu brauchst Du doch auch einen Benutzernamen.
Du weißt doch schon, wie man Schleifen macht. Wo hast Du konkret ein Problem?
mr-evil1
User
Beiträge: 35
Registriert: Montag 11. März 2019, 10:48

Wie setze ich die Schleife dass er "row für row" durchgeht? Also row[0] --> row[1] --> usw.
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Code: Alles auswählen

dinge_die_sich_aufzaehlen_lassen = [
   "das",
   "steht",
    "in",
    "jedem",
    "tutorial",
    "fuer",
    "python."
]
for entry in dinge_die_sich_aufzaehlen_lassen:
      print(entry)
Ohne wenigstens den Versuch, Python von der Pike auf zu lernen, wird programmieren nicht funktionieren.
mr-evil1
User
Beiträge: 35
Registriert: Montag 11. März 2019, 10:48

@__deets__ nichts für ungut. Deine Aussagen kannst du dir auch sparen. Diese bringen wenig.
Solltest du dir meinen 1.Post durchgelesen haben, sind das über 100 welche aufzuzählen wären. Müssen die alle geschrieben werden?
Ich denke Python kann das auch automatisch. Nur nicht in den Grundfunktionen.
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wie man eine Datei zeilenweise einliest steht ebenfalls in dem Tutorial. Ist alles „Grundfunktionen“. So wie das csv Modul, falls du darauf bestehst die Passwörter in eine Zeile zu schreiben.

Aber mit Einzelsatzfragen so lange quengeln, bis es einem einer vorkaut ist natürlich auch eine top Strategie. Viel Erfolg damit.
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

@mr-evil1: Doch, Python kann das. Auch in den Grundfunktionen. __deets__ hat dir die Lösung doch auf dem Silbertablet präsentiert.

Wenn du selbst diese Grundlagen nicht verstehst, dann solltest du dir ein Tutorial durchlesen um die Sprache zu lernen. Zum Beispiel das in der offizellen Python Dokumentation.
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@mr-evil1: Natürlich müssen die alle geschrieben werden. Wie sollen sie sonst in den Computer kommen? Aber das hast Du (oder wer auch immer) bereits getan.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
mr-evil1
User
Beiträge: 35
Registriert: Montag 11. März 2019, 10:48

Ok. Danke
Dann bin ich wohl zu unterbelichtet dafür.
Denn ich schaffe es nicht, dass er eine Datei öffnet und jedes "Wort" der Datei automatisch mit meiner "input" Eingabe vergleicht. Es funktioniert nur wenn ich die row [0], row [1], row [2] und so weiter manuell genau deklariere.dann läuft es .
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Als Beispiel:

Code: Alles auswählen

import csv

PASSWORD_FILENAME = "/storage/emulated/0/passw.csv"

def main():
    answer = input("Do you have an account?(yes or no) ")
    if answer != 'yes':
        print('Only with password.')
        return

    with open(PASSWORD_FILENAME, encoding='utf8') as csvfile:
        reader = csv.reader(csvfile, delimiter=';')
        passwords = next(reader)

    for heading in ['password: ', '2 more attempts:   ', 'last attempt:   ']:
        password = input(heading)
        if password in passwords:
            break
    else:
        print("3 times incorrect password.")
        return

    print("You are now logged in!")

if __name__ == '__main__':
    main()
mr-evil1
User
Beiträge: 35
Registriert: Montag 11. März 2019, 10:48

Vielen Dank. Genau das habe ich gesucht. Jetzt funktioniert es wie gewünscht. Auf das mit "next" habe ich nicht gedacht. Oft steht man einfach auf dem Schlauch.
harryberlin
User
Beiträge: 227
Registriert: Donnerstag 17. Dezember 2015, 12:17

zwischenfrage am rande, was bringt das passwort, wenn es jeder aus der csv auslesen kann?
empty Sig
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Für den passwortschutz am medienplayer reicht es wohl so gerade. Kann man natürlich auch mit 2-Faktor-Authentifizierung arbeiten. Muss man aber nicht.
mr-evil1
User
Beiträge: 35
Registriert: Montag 11. März 2019, 10:48

Die Datei wird online abgefragt.
Antworten