Hallo. Hab ein kleines Anliegen.
Ich habe eine Datei "pass.text"
Darin befinden sich viele Passwörter ca.100.. Jedes Passwort ist getrennt durch ;
In meinem Code möchte ich nun diese Passwörte aus der Datei mit dem Passwort der Tastatureingabe vergleichen.
Wenn das Passwort der Tastatureingabe mit einem Passwort in der Datei übereinstimmt darf erst der Nächste Schritt eingeleitet werden.
Sonnst wieder zurück in die EINGABE.
Der bestehende Code funktioniert bereits mit der internen abfrage in der .py Datei.
Passwort aus Datei auslesen und vergleichen
Das funktioniert soweit
Nur scheitere ich immer an der abfage aus einer Datei.
Code: Alles auswählen
def main():
count = 0
while count < 3:
kb = xbmc.Keyboard('default', 'heading', True)
kb.setDefault()
if count == 0:
kb.setHeading('Enter Password, 3 Versuche')
if count == 1:
kb.setHeading('Enter Password, noch 2 Versuche')
if count == 2:
kb.setHeading('Enter Password, letzter Versuch')
kb.setHiddenInput(True)
kb.doModal()
while kb.isConfirmed():
passwordHash = '123'
password_input = kb.getText()
break
else:
xbmc.executebuiltin('Quit')
if passwordHash == password_input:
print("Zugang gewaehrt")
from lib import startup
startup.show()
break
else:
count = count+1
else:
xbmc.executebuiltin('Quit')
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht 2 Tabs. So ist der Code kaum lesbar.
Die äußere while-Schleife ist eigentlich eine for-Schleife, am besten über den Text, den Du als Heading ausgeben willst. Die innere while-Schleife ist Quatsch, weil Du sie immer sofort per ›break‹ verläßt.
Ich glaube kaum, dass jemand direkt einen Passwort-Hash eingibt, der Variablenname ist irreführend, oder besser gesagt Wunschtraum, weil Passwörter tatsächlich nur als Hash gespeichert werden sollten.
Importe sollten am Anfang der Datei stehen, nicht mittendrin. Der Paketname `lib` ist zu generell, da solltest Du einen besseren Namen finden.
Zum eigentlichen Problem hast Du jetzt gar nichts gezeigt. Da das Problem unabhängig von Deiner Eingabeoberfläche ist, kannst Du es als Funktion schreiben.
Die Funktion sollte die Datei lesen, mit dem als Argument übergebenen Passwort vergleichen und True oder False zurückgeben. Wo hast Du damit ein konkretes Problem?
Mir fehlt da auch noch ein Benutzernamen.
Die äußere while-Schleife ist eigentlich eine for-Schleife, am besten über den Text, den Du als Heading ausgeben willst. Die innere while-Schleife ist Quatsch, weil Du sie immer sofort per ›break‹ verläßt.
Ich glaube kaum, dass jemand direkt einen Passwort-Hash eingibt, der Variablenname ist irreführend, oder besser gesagt Wunschtraum, weil Passwörter tatsächlich nur als Hash gespeichert werden sollten.
Importe sollten am Anfang der Datei stehen, nicht mittendrin. Der Paketname `lib` ist zu generell, da solltest Du einen besseren Namen finden.
Zum eigentlichen Problem hast Du jetzt gar nichts gezeigt. Da das Problem unabhängig von Deiner Eingabeoberfläche ist, kannst Du es als Funktion schreiben.
Die Funktion sollte die Datei lesen, mit dem als Argument übergebenen Passwort vergleichen und True oder False zurückgeben. Wo hast Du damit ein konkretes Problem?
Mir fehlt da auch noch ein Benutzernamen.
- __blackjack__
- User
- Beiträge: 13533
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Die Kritikpunkte mal grösstenteils umgesetzt könnte das so aussehen (ungetestet):
Code: Alles auswählen
import xbmc
from lib import startup
EXPECTED_PASSWORD = '123'
def main():
for heading in ['3 Versuche', 'noch 2 Versuche', 'letzter Versuch']:
keyboard = xbmc.Keyboard('default', 'heading', True)
keyboard.setDefault()
keyboard.setHeading('Enter Password, ' + heading)
keyboard.setHiddenInput(True)
keyboard.doModal()
if keyboard.isConfirmed():
password = keyboard.getText()
else:
xbmc.executebuiltin('Quit')
if password == EXPECTED_PASSWORD:
print('Zugang gewaehrt')
startup.show()
break
else:
xbmc.executebuiltin('Quit')
Code: Alles auswählen
- (void)countSheep {
unsigned int sheep = 0;
while ( ! [self isAsleep]) { ++sheep; }
}
Ersmal vielen Dank für eure Hilfe.
Sehr schöner Code. Was jedoch nicht funktioniert, wenn die eingabe falsch ist, dass er den counter hochzählt.
Wie gesagt, würde ich nur gerne anstelle " EXPECTED_PASSWORD = '123' "
das oder die Passwörter aus einer Datei, zB: pass.csv auslesen und vergleichen.
das csv modul habe ich mir auch angesehen, jedoch komme ich damit noch nicht zurecht..
Sehr schöner Code. Was jedoch nicht funktioniert, wenn die eingabe falsch ist, dass er den counter hochzählt.
Wie gesagt, würde ich nur gerne anstelle " EXPECTED_PASSWORD = '123' "
das oder die Passwörter aus einer Datei, zB: pass.csv auslesen und vergleichen.
das csv modul habe ich mir auch angesehen, jedoch komme ich damit noch nicht zurecht..
- __blackjack__
- User
- Beiträge: 13533
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@mr-evil1: Welcher counter? Es gibt keinen mehr, weil man den nicht braucht.
Code: Alles auswählen
- (void)countSheep {
unsigned int sheep = 0;
while ( ! [self isAsleep]) { ++sheep; }
}
- __blackjack__
- User
- Beiträge: 13533
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@mr-evil1: Ja, Du bist auf dem Holzweg. Man muss da weder rauf noch runter zählen. Die Texte stehen in der Liste und die Schleife geht über diese Liste, also gibt's in jedem Schleifendurchlauf den passenden Text.
Code: Alles auswählen
- (void)countSheep {
unsigned int sheep = 0;
while ( ! [self isAsleep]) { ++sheep; }
}
- __blackjack__
- User
- Beiträge: 13533
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@mr-evil1: Mit welcher Fehlermeldung wird es denn *im* ersten Schleifendurchlauf beendet? Denn das sollte genau so gehen wie es da steht. Das ``break`` wird *nicht* bei einer Fehleingabe erreicht, also musst Du ja irgendeine Fehlermeldung bekommen, da sonst die Schleife nicht verlassen wird.
Code: Alles auswählen
- (void)countSheep {
unsigned int sheep = 0;
while ( ! [self isAsleep]) { ++sheep; }
}
- __blackjack__
- User
- Beiträge: 13533
- 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.
Code: Alles auswählen
- (void)countSheep {
unsigned int sheep = 0;
while ( ! [self isAsleep]) { ++sheep; }
}
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.
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.
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.
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.
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.
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.
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()