passwortabfrage

Code-Stücke können hier veröffentlicht werden.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wie ich ja schon schrieb fragst Du das Passwort doch in einer Kommandozeilen-Shell ab. Wenn diese nicht vorhanden ist, kannst Du die Eingabeaufforderung folglich nicht "sehen". Eine solche Shell öffnet sich ja nicht einfach so!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

Hallo

ich denke du wirst den Befehl unter "Anwendungen -> Internet -> Firefox" vermutlich in etwa so abändern müssen

Code: Alles auswählen

xterm -hold -e "Dein_Skript"
Gruß...busfahrer
Alles wird gut ;-)
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

genial es funktioniert ! :) vielen vielen dank. :)
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

hmm zu früh gefreut, es geht zwar das terminal auf, wen ich jetzt über des menü firefox starte, aber wen ich die daten richtig eingebe kommt einfach nichts mehr, er geht also nicht auf. hmm
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

lösung gefunden:

Hauptmenü einstellungen -> firefox -> eigenschaften -> anwendung im terminal und dann bei Befehl: "mein script" und alles funktioniert wunderbar !

Tante Edith: Doch wieder zu früh gefreut, nach dieser einstellung kann ich zwar über des menu auf firefox und das terminal mit meinem script geht auf, aber es pasiert wieder nichts, wen ich alles richtig eingegeben habe.

Wiederum: Terminal -> firefox eingeben name passwort -> firefox startet sauber.
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

so, alles geht soweit, jetzt ist nur noch das script dran, ich wollte es neu schreiben und das ergebnis sieht man unten:
Ich wollte es eben neu schreiben und sauberer, aber, irgendwo ist ein fehler drin, den gebe ich das passwort oder den usernamen ein, "cleart" es zwar den screen, aber es haut mich auch aus dem programm und es kommt wieder:

ich bin schon lang am studieren, komm aber net wirklich drauf.. könnte mir jemand auf die sprünge helfen bitte ?

smodo@psycircle:

Code: Alles auswählen

#!/usr/bin/env python

import hashlib
import subprocess
import userlist
import getpass
import sys
import os

user = userlist.user
passwd = userlist.passwd


ticker = 2
passwd_input = str() 
user_input = str()

while (user_input != user and passwd_input != passwd) and ticker > -1:  

    user_input = hashlib.md5(getpass.getpass(
    "Wer klopft zu dieser Stund ? ")).hexdigest()

    passwd_input = hashlib.md5(getpass.getpass(
    "So sage mir, des Raetsel`s loesung ? ")).hexdigest()


    if (user_input == user and passwd_input == passwd):
        print "Gehet weiter... "
        subprocess.Popen("/usr/lib/firefox-3.6.24/firefox")
        
    elif (user_input == user and passwd_input != passwd):
        print "falsche loesung... "
        os.system("clear")

    elif (user_input != user and passwd_input == passwd):
        print "taeusche nicht mit falschen namen...! "
        os.system("clear")

    else:
        print "alles falsch"

    ticker = ticker - 1
    
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Füge mal prints ein um den Ablauf deines Programm zu erkennen und gib dir gleichzeitig die Belegungen ALLER Variablen aus. Die Klammern beim while und if sind übrigens überflüssig und sollten weggelassen werden.
Das Leben ist wie ein Tennisball.
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

ok danke, die klammern sind weg.

@EyDu wegen "Füge mal prints ein um den Ablauf deines Programm zu erkennen und gib dir gleichzeitig die Belegungen ALLER Variablen aus."

hmm ich benutze ja print und wie kann ich mir gleichzeitig alles ausgeben lassen ?!? sorry bin aber immer noch anfänger.. :)

und es ist immer noch komisch: Gebe ich die daten so ein das es eine bedingung eines "elif" erfüllt, funktionieren print und os.system("clear"), aber dann hauts es mich wieder raus. und es kommt wieder der standart terminal prompt.

EDIT: Habe es jetzt mal so probiert, geht aber auch nicht wirklich, ich weis nicht wie ich die Variablen für ide eingabe in die schleife einbinden kann, muss ich da schon mit "self" arbeiten ?
man man man möchte gerne dieses problem lösen, aber ich komm einfach nicht weiter, ich möchte eigentlich das die eingaben in einer eigenen funktion sind, da bin ich doch schon mal richtig oder ?

Code: Alles auswählen

#!/usr/bin/env python

import hashlib
import subprocess
import userlist
import getpass
import sys
import os
import time

user = userlist.user
passwd = userlist.passwd

def main():
    user_input = hashlib.md5(getpass.getpass(
    "Wer klopft zu dieser Stund ? ")).hexdigest()

    passwd_input = hashlib.md5(getpass.getpass(
    "So sage mir, des Raetsel`s loesung ? ")).hexdigest()
main()

while user_input != user and passwd_input != passwd or ticker >= 0:

    if user_input == user and passwd_input == passwd:
        print "Gehet weiter... "
        subprocess.Popen("/usr/lib/firefox-3.6.24/firefox")
        
    elif user_input == user and passwd_input != passwd:
        print "falsche loesung... "
        time.sleep(1)
        os.system("clear")
        main()
    elif user_input != user and passwd_input == passwd:
        print "taeusche nicht mit falschen namen...! "
        time.sleep(1)
        os.system("clear")
        main()
    else:
        print "alles falsch"
        time.sleep(1)
        os.system("clear")
        main()
        
    ticker = ticker - 1
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Was soll die Variable ticker bezwecken? Und könntest du mal ausführlich formulieren wie du vorhast alles genau zum Laufen zu kriegen, so ganz verstehe ich nämlich nicht wie es in der Form laufen (oder auch nicht laufen) soll.

Übrigens, wenn man statt eines Strings in Anführungszeichen einen Variablennamen (wie z.B. user, passwd, ticker, user_input, password_input) oder Ausdrücke (user == user_input) nach der Print-Anweisung schreibt, wird eine String-Repräsentation davon ausgegeben. Also ruhig mal den Code damit nach den Vergleichen/Zuweisungen spicken, dann wird alles klarer.

Was ich mir denken könnte ist, dass dein System nicht einfach mit MD5-Hashes arbeitet. Zumindest unixoide sollten mittlerweile ja Salts nutzen, sodass ein einfacher Abgleich ohne dessen Kenntnis daneben haut. Und Windows nutzt ja auch wieder ganz andere Systeme für die Authentifizierung.
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

so, habs total verworfen und neu gemacht.
Ist noch nocht ganz fertig, aber das grundgerüst steht, sozusagen.

die main() funktion könnte man sicherlich noch verkürzen, wird auch sicher noch gemacht. Und alles was halt zuviel war in main, in eine einzelne Funktion zu machen.

aber schauts mal an:

http://s1.directupload.net/file/d/2744/tnuwd7fr_png.htm
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
lunar

@smodo: Quelltext als Screenshot? Nicht Dein Ernst?! Erwartest Du jetzt von uns, dass wir den abtippen, um ihn ggf. auszuprobieren? Kopiere Deinen Quelltext doch bitte einfach in Deinen Beitrag, oder in ein Pastebin wie http://paste.pocoo.org
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

hehe jo sorry, dachte eig. die meisten schauen sowieso bei so kleinem zeugs nur drüber :) aber verstehe dich, sorry :)

programm:

Code: Alles auswählen

import userlist
import hashlib
import os
import getpass
import time
import sys

def benutzer(user): # Die Benutzer_User_eingabe wird umgewandelt !
    return hashlib.md5(user).hexdigest()
 
def pin(password):  # Die Benutzer_Passwort_eingabe wird umgewandelt !
    return hashlib.md5(password).hexdigest()

def main():
    os.system("clear")

    print "\n---{ Der Torwächter v0.4 }---"
    print "\nZerstöre den Torwächter mit (q oder Q)\n"
    user = raw_input("\nWer stört.. zu später Stund: ")

    if user in ("Q", "q"):    #evtl. Beenden ?
        sys.exit()
    else:
        md5user = benutzer(user)
        os.system("clear")
        print "\nSei gegrüsst %s\n" % (user)

    pinin = pin(getpass.getpass("\nSo sage mir dein {Zauberwort}: ")) #passwort eintippen !

                    # Ab hier beginnt die überprüfung !
    if md5user in userlist.users:
        if pinin == userlist.users[md5user]:
            os.system("clear")
            print "Viel Spass - %s" % (user)
            time.sleep(3)
        else:
            os.system("clear")
            print "Passwort Flasch !"
    else:
        os.system("clear")
        print "%s Existiert nicht !" % (user)
    
if __name__ == '__main__':
    main()    

und hier im gleichen ordner:

Code: Alles auswählen

# nach dem schema: ("username":"passwort")

users = {
         "29279a52c6d071bcf63f446d665c077e":"b667a962b6939e87f352a14012a4fa01",
         "83e1cc2744818f37bfbf54633883b0c8":"f379eaf3c831b04de153469d1bec345e"
        }
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Den Usernamen brauchst du nicht als md5 speichern, der soll ja nicht geheim bleiben. os.system("clear") ist böse, ich als einer der die Konsole viel benutzt würde das Skript verfluchen, dass mir "clear" aufruft.

@Lunar: das spart dir das Installieren einer IDE :twisted:
the more they change the more they stay the same
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

wie kann ich den sozusagen, die konsole putzen, wen ich os.system nicht benutzen sollte ? und ja ich weiss wiso, man kann nach os.system("clear") einen befehl anhängen. ABer wie kann ich das anderst machen ?
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
BlackJack

@smodo: Es geht ja nicht nur darum `os.system()` nicht zu benutzen, sondern darum die Konsole nicht zu leeren. Du weisst ja nicht was Du da alles löschst was der Benutzer vielleicht gerne noch gehabt hätte. „Vollbildschirm“-Programme für die Konsole stellen in der Regel hinterher den alten Inhalt wieder her. Dann wird es aber etwas komplexer als einfach nur ein externes Programm auf zu rufen. Das geht zum Beispiel mit dem `curses`-Modul aus der Standardbibliothek oder dem darauf aufbauenden `urwid` wenn es auch etwas externes sein darf.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Was die Ersetzung von `os.system` angeht: `subprocess.call(['clear'])`

http://docs.python.org/library/subprocess.html

Ich hab es aber auch lieber, wenn Programme ihre Finger von meinem Terminal lassen.
Antworten