AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Passwörter in Delphi-Programm

Ein Thema von worker@shool · begonnen am 3. Sep 2002 · letzter Beitrag vom 10. Sep 2002
Antwort Antwort
Seite 1 von 3  1 23      
worker@shool

Registriert seit: 3. Sep 2002
Ort: Berlin
7 Beiträge
 
#1

Passwörter in Delphi-Programm

  Alt 3. Sep 2002, 19:02
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.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2
  Alt 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.
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#3
  Alt 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
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#4
  Alt 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]
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
worker@shool

Registriert seit: 3. Sep 2002
Ort: Berlin
7 Beiträge
 
#5
  Alt 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
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#6
  Alt 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
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#7
  Alt 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
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#8
  Alt 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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#9
  Alt 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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#10
  Alt 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
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz