![]() |
Passwörter in Delphi-Programm
Wir haben in der Schule angefangen ein eigenes Programm zu entwickeln. Es handelt sich um ein Abi-durchschnitt-berechnungs-programm mit, dass noch einige andere verschiedene Dinge kann.
Da wir jedoch die eingegeben Zensuren speichern wollen, müssen wir wegen des Datenschutzes ein Passwort einrichten. Mit diesem Passwort muss man auf seine gespeicherten Daten zugreifen können. Wichtig ist noch das die Daten in einer nicht-lesbaren Datei gespeichert werden muss. Also, da meine Lehrerin davon nicht so viel Ahnung hat, wollte ich fragen ob jemand eine Idee hat und wenn ja Diese bitte genauer beschreibt so, dass ich sie jeden im Kurs erklären kann. Falls das alles auf gar keinen Fall geht begründet es bitte! Ich weiß das ist alles ganz schön viel aber ich würde mich sehr freuen wen mir einer hilft. :witch: |
Hi,
wie kompliziert darf es denn sein ? Und welche Klasse soll das verstehen ? Habe so etwas Ähnliches auch schon mal gemacht. Wenn es dringend ist werde ich es irgendwo auf dem Speicher finden. Aber als Tip : Du schreibst, die Datei solle nicht lesbar sein, meinst aber natürlich mit bloßem Auge auf dem Bildschirm, oder nicht? Solange es sich nicht um PIN-Codes oder ähnliches handelt, ist diese Methode hier vieeleicht die einfachste und nicht zu unsicher: Jeder Buchstabe wird in einer Datei gespeichert und zwar als integer. Nimm einfach den Ascii-Wert (ord ("Buchstabe"), addiere etwas hinzu und multipliziete es nocheinmal mit einer Zahl. Diese erzeugten Zahlen speicherst du in einer Datei. Will einer die Zahlen wissen, so muß er erst darauf kommen, daß es etwas mit den Ascii Werten zu tun hat und 2 Zahlen, sowie 2 Rechenoperationen, um dann die einzelnen Buchstaben dechiffrieren zu können. Benenne sie dann noch als .TXT Datei. Kenne einige Leute die wollten auch schon im Word EXE Dateien öffnen. Gruß Hansa Habe mir gerade noch einmal die Frage durchgelesen, da schreibst Du, nur die DATEN sollten nicht lesbar sein, aber die Passwörter doch wohl erst recht nicht, oder ?? :?: Jetzt hab ich das hier eh schon eingetippt. :dancer2: |
Hallöchen,
du könntest ja beim Start des Programmes, ein Modales Fenster öffnen, in dem das Passwort abgefragt wird. Ist das PW richtig, so verschwindet das Fenster und das Hauptformular kommt. Wenn nicht, dann App.Terminate;. Evtl. auch nach 3 falschen Eingaben, eine Var. hochzählen und wenn die bei 2 ist und das PW immernoch falsch, dann wieder App.Term. Zum Speichern. Daten eingeben und beim Speichern einfach Codieren. De- und Encode Komponeten gibt es genug, nur ein bisschen suchen, auf Torry o.ä. Ansonsten selba machen. Grüse, Daniel :hi: |
Hi worker,
prinzipell gilt: alles kan man knacken, und diese Lösung, die ich dir jetzt vorstellen werde, ist zwar einfach, aber wenn das Passwort nur ein paar Zeichen lang ist. dann braucht ein guter Cracker keine halbe Stunde dafür. Deshalb gilt: lange Passwörter verwenden! Also, die Grundlage dieser Verschlüsselung ist der Operator XOR (deshalb heißt sie XOR-Verschlüsselung). Ein Bbeispiel, wie dieser Operator funktioniert:
Code:
Also, wenn die beiden Zahlen im Binärcode übereinder stehen, dann kommt an die jeweileige Stelle im Ergebnis eine 1, wenn entweder oben oder unten eine 1 steht, sonst kommt eine 0.
101011 (43)
xor 001110 (12) --------------- 100101 (14) 43 xor 12 = 14 Was das jetzt mit Verschlüsselung zu tun hat, siehst du hier:
Code:
Hier wurde die Rechnung alszo nur umgedreht und es kommt wieder das 43 vom Anfang heraus. Also: 43 der sogenannte Plaintext, der unverschlüsselte Text (in diesem Fall der numerische Wert z.B. eines ANSI-Zeichens). 12 ist der Schlüssel und 14 der Encrypted Text, der verschlüsselte Text. Wendet man auf den Encrypted Text wieder den Schlüssel an, kommt wieder der Plaintext heraus. Bingo - Verschlüsselung und Entschlüsselung.
100101 (14)
xor 001110 (12) --------------- 101011 (43) Im Prinzip funktioniet es also so: du hast jetz beispielsweise ein Array mit 1000 Einträgen und ein Passwort als Text. Jetz gehst du das Array Zelle für Zelle durch und jedesmal auch im Passwort einen weiter. Dann wendest du das Passwort auf den Plaintext im Array an und speicherst das ganze wieder in einem Array und schon hast du verschlüsselt:
Code:
Diese Funktion kann man dann zum Ver- und Entschlüsseln verwenden.
type
TData = array[0..99] of Integer; function Crypt(data: TData; pw: String): TData; var i, p: Integer; begin p := 1; for i := 0 to 99 do begin Result[i] := data[i] xor Ord(pw[p]); Inc(p); if (p > Length(pw)) then p := 1; end; end; MfG, d3g [edit]War wohl ein bisschen zu langsam...[/edit] |
Ok,
Allerdings müsste auch eine Art Registrierung nötig sein. Nehmen wir an ich schaffe es einen login + PW zu schreiben, wie soll ich aber an dieser stelle die gespeicherten Daten dazu holen? Und schreibt ruhig so wie, als wenn ihr es einem 10 jährigen Kind erklären wollt. Ich haben ein halbes Jahr delphi gemacht und meiner Meinung nach noch am besten im kurs durch gesehen. :| Gruß + Danke Worker |
Hi worker,
mein Ansatz ist, dass du nicht im eigentlichen Sinne an einem Login arbeitest, das ist nämlich sehr unsicher, weil alles, was man zum Cracken braucht, in der EXE (im Assemblercode) drinsteht - für einen Cracker ein gefundenes Fressen. Was ich meine ist nämlich, dass du die Daten, die bearbeitet werden verschlüsselt in einer Datei abspericherst. Wenn das Programm gestartet wird, muss man sein PW eingeben und dann entschlüsselst du die Daten, die du gespeichert hast, mit diesem PW. Wenn ein falsches PW eingegeben wurde, kommt dann nur Mist raus. Du überprüfst, ob alle Werte korrekt sind (d.h. überall Punktzahlen zwischen 0 und 15 stehen o.ä.) und wenn ja, ist es das richtige PW. Wenn nicht, wird das Programm einafch sang- und klanglos geschlossen. Radikal, aber ziemlich effekti´v, behaupte ich mal. MfG, d3g |
Hallo Worker,
schau doch auch einfach mal in die OH. (Für ein 10 Jährigen, OnlineHilfe). LoadFromFile und SaveToFile. Mit Load holst Du dir die ganzen Werte aus der Datei und mit Save schreibst du sie natürlich. Du erstellst ein neues Project. Nun siehst du also ein Editorfenster und ein Formular. Nun Datei\Neu\neues Formular. Es heisst dann schon Form2. Im OnCreate von Form1 kannst du nun folgendes schreiben: Form2.ShowModal. Das Modal sorgt dafür, dass du kein Zugriff auf das Hauptformular hast, solang Form2 geöffnet ist. Auf Form2 plazierst du enfach mal ein Edit, ein Label und zwei Buttons. Im OnShow von Form2 schreibst du dann sowas: Label1.Caption := 'Hier bitte das Passwort eingeben:'; Edit1.PasswordChar := '*'; //Damit sieht man das Passwort nciht bei der eingabe, so wie es bei vielen Programmen ist, einfach nur die *. Den einen Button nennst du OK(Button1) den anderen Beenden(Button2) oder so. Im OnClick von button2 schreibst du Application.Terminate; Soweit Klar? Die liebe OH sollte in nächster Zeit dein Freund wwerden. Wir helfen dir natürlich alle gerne, aber du solltest nciht davon ausgehen, das dir jemand deine programme schreibt. Schau dir mal folgende Begriffe an: Assignfile, Reset, ReWrite, CloseFile, ReadLn, WriteLn, LoadFromFile, SaveToFile. Grüsse, Daniel :hi: |
Hallo worker,
du kannst die Daten z.B. in einer Paradox Datenbank speichern und dort Paßwörter definieren. Wenn du dann versuchst die Datenbank z.B. mit einem HEX Editor zu lesen, sind die Daten nicht mehr lesbar. Knacken ist wie gesagt immer möglich, aber für deine Anwendung funktioniert das Ganze. Außerdem bleibst du flexibel, was eine Erweiterung deines Programmes anbelangt. Dafür klebst du dir zwar die BDE an die Backe, aber du lernst auch etwas über DB Programmierung. |
Hallo Worker,
was hast Du eigentlich für eine Delphiversion zur Verfügung? MrSpocks vorschlag würde auch Sinn machen, DB kannst du aber nur ab Prof. machen. Mit Personal geht es nicht. Grüsse, Daniel :hi: |
Moin Worker,
wenn ich nicht irre, handelt es sich ja nicht um eine variable Anzahl Daten, sondern um 0 bis 15 Punkte je möglichem Fach, und dass je Schüler/in. So gesehen, wäre der Ansatz von d3g nicht verkehrt, denn es gibt eine Verschlüsselung, die nicht knackbar ist, nämlich das OTP (One Time Pad). Hierbei entspricht die Länge des Schlüssels der Länge der zu verschlüsselnden Daten, und die Daten werden XOR verschlüsselt. In diesem Falle müsste sich also jeder Betroffene einen Schlüssel einfallen lassen, z.B. einen beliebigen ASCII String, der von seiner Länge her der Anzahl der Fächer entspricht. Nur wenn der richtige String eingegeben wird, stimmt auch für jedes Fach die Punktzahl. Auch wenn hier nur Werte von 0 bis 15 verschlüsselt werden müssen, müsste das Funktionieren (falls jemand ein Gegenbeispiel hat nur raus damit;-)). Es darf nur niemand einen Begriff wählen, den man mit ihm/ihr in Verbindung bringen kann. Ideal wäre eine wild zusammengewürfelte Zeichenkombination. (incl. Ziffern und Sonderzeichen). Soweit jedenfalls, wenn nicht jemand allgemein Zugriff auf die Daten haben muss. Ansonsten könnte man es mit einem solchen Key in der Länge Anzahl der Fächer machen. Hier besteht dann allerdings eher die Gefahr es knacken zu können, wenn man von verschiedenen Personen je einen Punktwert kennt, so dass alle möglichen Fächer abgedeckt sind, lässt sich anschliessend, problemlos, der Key ermitteln. Gibt es dazu keinen Anhaltspunkt dürfte es wieder unmöglich sein. Allerdings entspräche diese Methode dann auch nicht mehr dem Prinzip des OTP. Wie ich aber die Schule kenne, dürfte die Anzahl der Anhaltspunkte locker ausreichen :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz