DESFingerprint bei gleichen anfangsbuchstaben gleich

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
benji
Beiträge: 124
Registriert: 01.11.2006 20:23

DESFingerprint bei gleichen anfangsbuchstaben gleich

Beitrag von benji »

hiho
schwer zu erklären, deshalb ist der titel auch nicht so gelungen.
Ich habe ein passwort mittels DESfingerprint in der string-variable "losung$" gespeichert.
Während der laufzeit wird die "losung$" mit einem in ein Stringgadget eingegebenen Text verglichen (text wird vorher auch mittels DES verschlüsselt)

Code: Alles auswählen

If Event = #PB_EventGadget
  
      If GadgetID = #check
    antwort$ = GetGadgetText(#antwort)

    
       
    antw0rt$ = DESFingerprint("0qwert43@", antwort$)
    losung$ = DESFingerprint("0qwert43@", "MANN")
     
    
    If antw0rt$ = losung$
      MessageRequester("OK", "richtiges PW",#MB_ICONINFORMATION )
     
    Else 
    MessageRequester("sorry", "leider falsch.... ",#MB_ICONERROR)  
    EndIf
mein problem:
wenn man als antwort$ M oder MA (gefolgt von nichts oder egal welchen zeichen) eingibt, ist der DES-Code gleich. also muss man nicht das richtige passwort eingeben sondern es reichen M oder MA und dass darf nicht sein.

Benutze ich die funktion falsch?
wie sollte ich das lösen?

gruß
hussi
Beiträge: 70
Registriert: 19.05.2005 13:30

Beitrag von hussi »

mach es doch einfach so:

Code: Alles auswählen

    antw0rt$ = DESFingerprint(antwort$, "0qwert43@") 
    losung$ = DESFingerprint("MANN", "0qwert43@") 
    
    ;aus der Hilfe:
    
    Debug DESFingerprint("Password", "Key007")
    Debug DESFingerprint("NewPass", "Key007")
Benutzeravatar
benji
Beiträge: 124
Registriert: 01.11.2006 20:23

Beitrag von benji »

hussi hat geschrieben:mach es doch einfach so:

Code: Alles auswählen

    antw0rt$ = DESFingerprint(antwort$, "0qwert43@") 
    losung$ = DESFingerprint("MANN", "0qwert43@") 
    
    ;aus der Hilfe:
    
    Debug DESFingerprint("Password", "Key007")
    Debug DESFingerprint("NewPass", "Key007")
aber wie soll ich die beiden dann noch vergleichen?
bzw: das prob ist ja, dass ich im Programm selbst nur den String mit dem passenden wert angebe der Teil

Code: Alles auswählen

losung$ = DESFingerprint("MANN", "0qwert43@") 
existiert nicht, ich schreibe mir den entstandenen String auf und schreibe ihn direkt in die Variable:

Code: Alles auswählen

losung$ = "MA282owkqKcYo"
verstehst du?

//EDIT//
das hilft im übrigen auch nicht, die DES-Strings sind gleich obwohl unterschiedliche "Schlüssel$" angegeben wurden
Zuletzt geändert von benji am 02.04.2007 19:34, insgesamt 1-mal geändert.
hussi
Beiträge: 70
Registriert: 19.05.2005 13:30

Beitrag von hussi »

Ok..
Also schau Dir nur das mit dem Debugger an:

Code: Alles auswählen

    Debug DESFingerprint("Password", "Key007") 
    Debug DESFingerprint("NewPass", "Key007") 
Du wirst feststellen das die Werte nicht gleich sind:

Ausgabe:
KeMDfQKVJMbYc
KeGMaBpfNusQ2
Benutzeravatar
benji
Beiträge: 124
Registriert: 01.11.2006 20:23

Beitrag von benji »

Bild
schau dir das an. das darf nicht sein

//EDIT//
es reicht, wenn ich nur PA eingebe und es kommt der gleiche string raus
hussi
Beiträge: 70
Registriert: 19.05.2005 13:30

Beitrag von hussi »

Code: Alles auswählen


crypt_passwort$ = DESFingerprint("meinpasswort","key")

OpenConsole()

Print("Gebe Dein Passwort ein : ")
eingabe$ = Input()
PrintN("")

If DESFingerprint(eingabe$,"key") = crypt_passwort$
  PrintN ("Richtig")
Else
  PrintN ("Falsch")
EndIf

PrintN("Druecken Sie Escape zum Beenden.")
Repeat
  KeyPressed$ = Inkey()
Until KeyPressed$ = Chr(27) ; Wartet, bis Escape gedrückt wird
Ich hoffe, Dir kommt die Erleuchtung...
Benutzeravatar
benji
Beiträge: 124
Registriert: 01.11.2006 20:23

Beitrag von benji »

hussi hat geschrieben:

Code: Alles auswählen


crypt_passwort$ = DESFingerprint("meinpasswort","key")

OpenConsole()

Print("Gebe Dein Passwort ein : ")
eingabe$ = Input()
PrintN("")

If DESFingerprint(eingabe$,"key") = crypt_passwort$
  PrintN ("Richtig")
Else
  PrintN ("Falsch")
EndIf

PrintN("Druecken Sie Escape zum Beenden.")
Repeat
  KeyPressed$ = Inkey()
Until KeyPressed$ = Chr(27) ; Wartet, bis Escape gedrückt wird
Ich hoffe, Dir kommt die Erleuchtung...
nein, im grunde hast du genau das gemacht, was ich auch getan habe...

einziger unterschied: bei dir klappts bei mir nicht -_-
Zuletzt geändert von benji am 02.04.2007 20:03, insgesamt 1-mal geändert.
hussi
Beiträge: 70
Registriert: 19.05.2005 13:30

Beitrag von hussi »

Ich glaube, das wir irgendwie aneinander vorbei reden.

Was genau willst Du denn erreichen?

Übrigens: der "Key" also der zweite Teil von DESFingerprint nimmt immer nur die ersten zwei Zeichen vom String...
Benutzeravatar
benji
Beiträge: 124
Registriert: 01.11.2006 20:23

Beitrag von benji »

ich poste mal den code...

Code: Alles auswählen

IncludeFile "rätsel_common.pb"
ratsel$ = "Es passt zum Reim auf den Laut der Katze."

Open_Window_0()
SetGadgetText(#raetsel, ratsel$) 

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  
  WindowID = EventWindowID() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadgetID() ; Is it a gadget event?
  
  EventType = EventType() ; The event type
  
  ;You can place code here, and use the result as parameters for the procedures
   
  
  
  If Event = #PB_EventGadget
        If GadgetID = #check
    antwort$ = GetGadgetText(#antwort)

    
       
    losung$ = "MA282owkqKcYo"
    
    If DESFingerprint("reijin", antwort$) = losung$
      MessageRequester("Geschafft!!!", "Sehr gut, du hast das Rätsel gelöst :) bis zum nächsten Rätsel - reijin",#MB_ICONINFORMATION )
     
    Else 
    MessageRequester("sorry", "leider falsch.... ",#MB_ICONERROR)  
    EndIf           
       
  EndIf
EndIf
  
Until Event = #PB_Event_CloseWindow ; End of the event loop

End
es handelt sich bei losung$ = "MA282owkqKcYo" um das Wort "MANN" welches ich vorher mit DES verschlüsselt habe.

wenn man M oder MA als lösung eingibt, wird dies als korrekt eingestuft
warum?
hussi
Beiträge: 70
Registriert: 19.05.2005 13:30

Beitrag von hussi »

Ließt Du eigentlich was man Dir schreibt?
Übrigens: der "Key" also der zweite Teil von DESFingerprint nimmt immer nur die ersten zwei Zeichen vom String...

Code: Alles auswählen

If DESFingerprint("gleiches passwort","Ma") = DESFingerprint("gleiches passwort","Mann, ich habe es kapiert")
  MessageRequester("?","jo")
Else
  MessageRequester("?","nö")
EndIf
Nachtrag... (die hälfte vergessen)

Code: Alles auswählen

If DESFingerprint("gleiches passwort","Ma") = DESFingerprint("falsches passwort","Ma")
  MessageRequester("?","jo")
Else
  MessageRequester("?","nö")
EndIf
Beispiel 1 wir immer wahr sein... das zweit immer falsch...
Antworten