Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Passwörter in Delphi-Programm (https://www.delphipraxis.net/765-passwoerter-delphi-programm.html)

worker@shool 3. Sep 2002 19:02


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:

Hansa 3. Sep 2002 19:34

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:

Daniel B 3. Sep 2002 19:35

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:

d3g 3. Sep 2002 19:49

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:
    101011 (43)
xor 001110 (12)
---------------
    100101 (14)

43 xor 12 = 14
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.

Was das jetzt mit Verschlüsselung zu tun hat, siehst du hier:

Code:
    100101 (14)
xor 001110 (12)
---------------
    101011 (43)
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.

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:
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;
Diese Funktion kann man dann zum Ver- und Entschlüsseln verwenden.

MfG,
d3g

[edit]War wohl ein bisschen zu langsam...[/edit]

worker@shool 3. Sep 2002 19:52

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

d3g 3. Sep 2002 20:00

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

Daniel B 3. Sep 2002 20:05

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:

MrSpock 3. Sep 2002 20:21

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.

Daniel B 3. Sep 2002 20:30

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:

Christian Seehase 3. Sep 2002 20:56

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:

sakura 4. Sep 2002 10:02

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:...

Chewie 4. Sep 2002 16:29

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 ;-)

Hansa 4. Sep 2002 17:11

siehe mein posting am Anfang des Threads. Es geht (hoffentlich nicht um Kreditka :dancer: rten

worker@shool 4. Sep 2002 17:49

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:

Daniel B 4. Sep 2002 17:56

Hallo Worker, :hi:

Zitat:

Zitat von worker@shool haute weniger Wild in die Tasten und
Ich danke euch erst mal für die ganzen Lösungsvorschläge!!!

No Problem...

Zitat:

Kurz noch zu unserer Lehrerin, sie ist eigentlich recht kompetent, hat aber meiner Meinung nach solch eine Problemstellung noch nie behandelt.
nun, ich hatte nie Delphi in Info, damals gab es noch QBasic. :roll:
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:

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.
Das gibt bestimmt auch wieder user.
<singend>Ooooooohh iiissst daaaasss schööööön, ooohh.......</singend> Oki, oki, ich lass es wieder...

Grüsse, Daniel :hi:

Christian Seehase 4. Sep 2002 18:37

Moin Daniel B,

Zitat:

nun, ich hatte nie Delphi in Info, damals gab es noch QBasic.
Günstling :mrgreen:
Zu meiner Schulzeit, und damit stehe ich bestimmt nicht alleine da, gab's noch keinen Informatik Unterricht.

sakura 4. Sep 2002 19:11

Hi Christian,

Ein Günstling hat Delphi.
Ein "armer Kerl" hatte kein Info.
Was bin ich, ich hatte TP6 :?:

Christian Seehase 4. Sep 2002 19:17

Moin sakura,

so recht verstanden hab' ich das jetzt aber nicht. :shock:

Luckie 5. Sep 2002 01:38

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.

worker@shool 9. Sep 2002 19:16

hey luckie!

Zitat:

Das ganze soll ja nicht ernsthaft angewendet werden, denke ich mal.
Falsch gedacht! :mrgreen:
Wenn das ganze nicht ernsthaft angewandt werden soll, würden wir uns doch nich so viele Gedanken über den Datenschutz machen.

Gruß WoRkEr
:coder:

Luckie 9. Sep 2002 20:40

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.

sakura 10. Sep 2002 08:35

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: http://www.torry.ru/vcl/security/strong/chipher.zip

Code:
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...
[edit]Inofs und Link[/edit]


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