![]() |
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: |
Ich würde die Daten selbst nicht mit einem, durch den User bestimmbaren, Passwort verschlüsseln. Vergisst der User das Passwort :shock:, dann sind alle Daten unwiderruflich verloren. :twisted:
Nur die Passwörter sollten One-Way-Kodiert (MD5, Hash, ...) hinterlegt werden. Um die eigentlichen Daten zu schützen, dürfte ein Paradox (IB, Access, ...) Datenbank mit Standardverschlüsselung und einem, durch den Administrator einstellbares Passwort, reichen. ...:cat:... |
Konkrete Lösungsvorschläge wurden schon genug genannt, also möcht ich was andres sagen.
Falls euer Inf-Kurs nicht komplett aus Genies besteht und eure Lehrer nicht in der Schule schon berufseinstiegsbereite Programmierer erzeugen will, wovon ich eigentlich ausgehe, find ich die Lösungen leicht übertrieben. Wennn ich an meinen Informatik-Unterricht zurückdenke und das dann mit dem hier vergleiche, dann ist das ein gigantischer Unterschied. Gut, der Großteil des Kurses war nie sehr motivert und begriffsschnell, aber die meisten haben endgültig aufgegeben, es zu verstehen, als wir Dateien benutzten, inn der ganz einfachen Form AssignFile, Reset bzw. Append bzw. Rewrite, Write bzw. Read und CloseFile. Das ist dagegen einige Gänge höher. Aber gut, ich weiß nicht wie es in deiner Schule abgeht, worker, und so zählt meine Meinung nicht viel. Und es würde mich nicht wundern, wenn ein Informatik-Lehrer unter "einer nicht-lesbaren Datei" eine Datei versteht, die nicht die Endung .txt hat und nicht im Programmverzeichnis liegt :mrgreen: . Aber gut, das ist nur meine Ansicht. Und wenn du irgendeinen Vorschlag davon aufgreifst, lernst du bestimmt mehr als in der Schule. Nur würd ich halt nicht erwarten, dass der Lehrer, geschweige denn die Schülerschaft, deine Lösung versteht. Aber damit müssen Genies halt leben :mrgreen: Nachtrag: Ich hab gelesen, dass es ja eine Lehrerin und kein Lehrer ist. Also denkt euch die Endung bitte im Sinne der Emanzipation ;-) |
siehe mein posting am Anfang des Threads. Es geht (hoffentlich nicht um Kreditka :dancer: rten
|
Ich danke euch erst mal für die ganzen Lösungsvorschläge!!! :P
Folgendes ist noch zu sagen erst mal hoffe ich, dass die Sache mit dem 10 jährigen nicht falsch verstanden wurde, ich bin in einem 13. Klasse Info kurs.... allerdings machen wir erst ein Jahr Delphi (3 Stunden/Woche). Und natürlich hoffe ich nicht auf eine komplette Lösung meines Problems da uns ja sonst die ganze Arbeit um Kurs flöten geht :wink: Aber wie Chewie schon recht passend festgestellt hat sind einige Ideen einfach zu komplex und für uns in 3 Wochenstunden nicht lösbar. Die Frage nach der Delphiversion kann ich leider nicht ganz konkret beantworten, ich weiß wir haben Delphi 4 auf deutsch aber näheres kann ich ja noch morgen dazu schreiben. Kurz noch zu unserer Lehrerin, sie ist eigentlich recht kompetent, hat aber meiner Meinung nach solch eine Problemstellung noch nie behandelt. Und da ich mir eure ganzen Ideen nicht merken kann :oops:, werde ich meinen Kurs auf diese seite verweisen, damit alle diese Diskusion lesen können. Nochmal Danke!! wOrKeR :coder: |
Hallo Worker, :hi:
Zitat:
Zitat:
Aber ich könnte mir Vorstellen, das eine Lehrerin, oder Lehrer der Delphi lehrt, sowas in etwa 1Stunde selbst Programmiert und in etwa 12 Stunden sehr wohl erklären kann. Das wäre dann ein Monat. Aber Ihr könnt mich natürlich vom gegenteil überzeugen. :mrgreen: Zitat:
<singend>Ooooooohh iiissst daaaasss schööööön, ooohh.......</singend> Oki, oki, ich lass es wieder... Grüsse, Daniel :hi: |
Moin Daniel B,
Zitat:
Zu meiner Schulzeit, und damit stehe ich bestimmt nicht alleine da, gab's noch keinen Informatik Unterricht. |
Hi Christian,
Ein Günstling hat Delphi. Ein "armer Kerl" hatte kein Info. Was bin ich, ich hatte TP6 :?: |
Moin sakura,
so recht verstanden hab' ich das jetzt aber nicht. :shock: |
Also wenn TP6 eine Krankheit ist, dann wäre es einigermaßen verständlich. :roll:
Also alle eure Lösungen sind wohl für den Unterricht wohl etwas zu komplex. Ich würde die Dateien einfach mit XOR verschlüsseln. Wenn jetzt eine Datei geöffnet wird, wird das Passwort abgefragt, entpackt und lesbar in einem Memo angezeigt. Fertig. Sollte reichen. Das ganze soll ja nicht ernsthaft angewendet werden, denke ich mal. |
hey luckie!
Zitat:
Wenn das ganze nicht ernsthaft angewandt werden soll, würden wir uns doch nich so viele Gedanken über den Datenschutz machen. Gruß WoRkEr :coder: |
Für mich hat sich das wie eine Übung für den Unterricht angehört.
Aber es gibt fertige Units für diverse Verschlüsselungsalgorithmen, wie zum Beispiele BlowFish oder so. |
Such mal bei Google nach dem DEC für Delphi (Delphi Encryption Compendium). Das ist eine der wohl besten und bekanntesten Open Source Verschlüsselungsbibliotheken für Delphi.
Noch ein Link zum DEC: ![]()
Code:
[edit]Inofs und Link[/edit]
40 Ciphers (IDEA, Blowfish, Twofish, DES, Square ...)
23 Hashs (MD4/5, SHA/1, RipeMD, Havel, Tiger ...) 5 Checksums (CRC32, CRC16-CCITT, CRC16-Standard ...) 6 Textformats (MIME Base 64, XX/UU Coding, RFC1760 Six Word ...) 2 Randoms (LFSR Linear Feedback Shift Register with variable Period upto 2^2032-1 ...) with Ciphers can be encrypt in Modes CTS/ CBC/ CFB/ OFB/ ECB Ciphers supports Message Authentication Codes in CBC-MAC/ CFB-MAC/ CTS-MAC fast Implementation (i.e. Blowfish > 8Mb/sec, MD4 > 27Mb/sec) Internet RFC2289/RFC1760/RFC2444 One Time Password Routines as Component Many more... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:58 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