AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Verschlüssel, in einer .ini-Datei speichern später auflösen
Thema durchsuchen
Ansicht
Themen-Optionen

Verschlüssel, in einer .ini-Datei speichern später auflösen

Ein Thema von Lamy · begonnen am 25. Mai 2004 · letzter Beitrag vom 26. Mai 2004
Antwort Antwort
Seite 1 von 3  1 23      
Lamy

Registriert seit: 11. Apr 2004
119 Beiträge
 
Delphi 7 Personal
 
#1

Verschlüssel, in einer .ini-Datei speichern später auflösen

  Alt 25. Mai 2004, 22:25
Hi!

Ich möchte hier gerne Passwörter in einer .ini-Datei speichern, hier mal der Code:

Code:
PROCEDURE TVerbindung.CbHostnameChange(Sender: TObject);
VAR ini: Tinifile;
  s: STRING[255];
  c: ARRAY[0..255] OF byte ABSOLUTE s;
  i: Integer;
BEGIN
  ini := TIniFile.Create(PChar(ExtractFilePath(Application.ExeName) + '\history.ini'));
  s := ini.Readstring(Cbhostname.text, 'Passwort', s);
        For i := 1 To Length(s) do s[i] := Chr(superkey[i] Xor ord(s[i]));
  Edpasswort.Text := s;
  Edusername.text := ini.Readstring(Cbhostname.text, 'Username', Edusername.Text);
  EdPort.text := ini.Readstring(Cbhostname.text, 'Port', EdPort.Text);
  ini.free;
END;
Verschlüsselt wurde das so:

Code:
PROCEDURE TVerbindung.BtverbindungClick(Sender: TObject);
VAR ini: Tinifile;
////////////////
  s: STRING[255];
  c: ARRAY[0..255] OF byte ABSOLUTE s;
  i: Integer;
////////////////
BEGIN
(...)
  s := EdPasswort.Text;
  FOR i := 1 TO ord(s[0]) DO
    c[i] := superkey[i] XOR c[i];
  ini.Writestring(CbHostname.Text, 'Passwort', s);
(...)
Was ist daran falsch?
Es wird zwar ent- aber nicht wieder verschlüsselt.

Danke schonmal für eure Hilfe!
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: Verschlüssel, in einer .ini-Datei speichern später auflö

  Alt 25. Mai 2004, 22:32
ok, eliminieren wir mal den Code der keinerlei Wirkung besitzt dann wird aus:

Delphi-Quellcode:

  s := EdPasswort.Text;
  FOR i := 1 TO ord(s[0]) DO
    c[i] := superkey[i] XOR c[i];
  ini.Writestring(CbHostname.Text, 'Passwort', s);
eben

Delphi-Quellcode:
  s := EdPasswort.Text;
  ini.Writestring(CbHostname.Text, 'Passwort', s);
und daraus

  ini.Writestring(CbHostname.Text, 'Passwort', EdPasswort.Text); Gruß Hagen
  Mit Zitat antworten Zitat
Lamy

Registriert seit: 11. Apr 2004
119 Beiträge
 
Delphi 7 Personal
 
#3

Re: Verschlüssel, in einer .ini-Datei speichern später auflö

  Alt 25. Mai 2004, 22:40
Hab den Code aus dem Delphi6 - Kochbuch, dort steht er (fast) genau so geschrieben, natürlich wird noch was anderes deklariert und hinzugefügt:

Delphi-Quellcode:
(...)
CONST keysize = 1000; { hier kann die Größe des Schlüssels geändert werden }
  code = 4711; { der presönliche Schlüssel (Longint-Wert möglich) }

VAR
  Verbindung: TVerbindung;
  superkey: ARRAY[1..keysize] OF byte;

(...)
PROCEDURE TVerbindung.FormCreate(Sender: TObject);
VAR ini: Tinifile;
  i: integer;
BEGIN
  randseed := code;
  randomize;
  FOR i := 1 TO high(superkey) DO
    superkey[i] := random(255);
(...)
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#4

Re: Verschlüssel, in einer .ini-Datei speichern später auflö

  Alt 25. Mai 2004, 22:48
Sorry, ich habe den nachfolgenden TypCast übersehen

Delphi-Quellcode:
var
 c: ARRAY[0..255] OF byte ABSOLUTE s;
Sieht man sehr selten heutzutage.

Dein Problem entsteht aber dadurch das durch die XOR Operation im String selber unlesbare Sonderzeichen entstehen, und INI Files können diese NICHT korrekt speichern.

Gruß Hagen
  Mit Zitat antworten Zitat
Lamy

Registriert seit: 11. Apr 2004
119 Beiträge
 
Delphi 7 Personal
 
#5

Re: Verschlüssel, in einer .ini-Datei speichern später auflö

  Alt 25. Mai 2004, 23:10
Na doll - gibts ne Alternative?
[bitte nix in der Registry speichern :/
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#6

Re: Verschlüssel, in einer .ini-Datei speichern später auflö

  Alt 25. Mai 2004, 23:13
Jo, machdem der Text "verschlüsselt" wurde wird er in ein lesbares Format umgewandelt und dann gespeichert.
Oder du benutzt unter Delphi 7 TIniFile.WriteBinary(), diese Methode kann x-beliebige binäre Streams speichern indem sie diese Daten in der INI als HEX Werte speichert.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#7

Re: Verschlüssel, in einer .ini-Datei speichern später auflö

  Alt 25. Mai 2004, 23:19
Übrigens, deine "Verschlüsselung" ist ziemlich unsicher und könnte unter Umständen in neueren Delphi Versionen unterschiedliche Resultate erzeugen. Denn Borland hat schon immer proklamiert das der Zufallsgenerator in Random() sich von Version zu Version unterscheiden kann.

Wenn du es echt einfach haben willst das könntest du auch das DEC benutzen:


Delphi-Quellcode:

procedure SavePassword;
begin
  Ini.WriteString(,...., THash_MD5.CalcString('Secret Key' + EPassword.Text, nil, fmtMIME64));
end;

function CheckPassword: Boolean;
begin
  Result := Ini.ReadString(...., '') = THash_MD5.CalcString('Secret Key' + EPasword.Text, fmtMIME64);
end;
Auf alle Fälle wäre dies "sicherer" als deine Methode.

Was soll denn eigentlich passieren wenn der Benutzer so clever ist und in der INI Datei einfach verschiedene Passwörter austauscht ??


Gruß Hagen
  Mit Zitat antworten Zitat
Lamy

Registriert seit: 11. Apr 2004
119 Beiträge
 
Delphi 7 Personal
 
#8

Re: Verschlüssel, in einer .ini-Datei speichern später auflö

  Alt 26. Mai 2004, 00:42
... Dann kann er ganz einfach nicht zum Ftpserver connecten und eine Meldung wird angezeigt dass das PW falsch ist
Hab leider nur Delphi 5...


Braucht man echt nicht mehr als nur diese eine Prozedur und die Funktion? Das wär zu einfach ^^

Gute Nacht,
Lamy
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Verschlüssel, in einer .ini-Datei speichern später auflö

  Alt 26. Mai 2004, 07:59
Zitat von Lamy:
Braucht man echt nicht mehr als nur diese eine Prozedur und die Funktion? Das wär zu einfach ^^
Falls du das DEC benutzen möchtest, brauchst du natürlich schon noch ein bisschen mehr.

Hier kannst du es herunterladen.
Falls du es nicht weißt, das DEC ist von Hagen Reddmann (negaH). Also von dem, der dir bis jetzt so schön geholfen hat.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: Verschlüssel, in einer .ini-Datei speichern später auflö

  Alt 26. Mai 2004, 11:39
Zitat:
... Dann kann er ganz einfach nicht zum Ftpserver connecten und eine Meldung wird angezeigt dass das PW falsch ist
Hab leider nur Delphi 5...
Aha, schon hat sich deine Frage wieder ein bischen präzesiert
Du benötigst also kein LogIn sondern eine Passwortsicherung mit Wiederherstellung des originalen Passwortes.

Dazu ist obige Routine natürlich nicht benutzbar, ein gutes Zeichen, da man in der Kryptographie IMMER nur die Algos. auf ein Problem anwenden sollte die für dieses Problem entwickelt wurden.
Im Falle eines Logins wäre eine erweiteret Methode wie die obige also richtig.

Nun, in deiner Software soll das Login Passwort für einen FTP Server gespeichert werden. Ich vermute mal das deinen Software für einen Benutzer viele solcher Zugangs Kennwörter zu vielen Servern speichern soll. Am besten ist dann folgendes Konzept:

Es gibt eine Konfigurationsdatei in der jeder FTP Server, dessen Einstellungen, URL und eben Login Password und Username verschlüsselt gespeichert werden. Wichtig ist dabei das alle Informationen verschlüsselt werden, da alleine die Infos welche FTP Server ein Benutzer ansteuert schon ein Datenschutzproblem darstellen.

Diese Konfigurationsdatei ist verschlüsselt, und das mit einem Passwort das der jeweilige Benutzer beim Starten in Deine Software eingeben muß. Aus Sicht dieser Forderungen ist es beweisbar möglich das komplette System kryptographisch sicher zu bekommen.

Fazit:
- baue die kompletten Konfigurationen der FTP Server in Records oder Objecte
- speichere die komplette Liste in einen TMemoryStream
- verschlüssele diesen Stream mit einem sicheren Verschlüsselungsalgo. zb. TCipher_Blowfish oder TCipher_Rijndael aus dem DEC. Als Passwort wird das Anmelde-Passwort des Benutzers genommen.
- Speichere den verschlüsselten Stream als Datei, oder in der Registry.

- der spätere Login eines benutzers kann nun leicht überprüft werden. Die Konfiguration wird geladen und mit dem eingegeben Passwort entschlüsselt. Sollte eine Prüfsumme damit korrekt entschlüsselt worden sein, so war das eingegeben Passwort korrekt und die Software erlaubt den Zugriff durch den Benutzer.

Die komplette Sicherheit des Systems verankert sich im benutzergewähltem Passwort. Nur eine Brute Force Attacke wäre möglich um das Passwort zu knacken. Ist das Benutzerpasswort schlecht gewählt so hast du zumindestens alle kryptographisch notwendigen Optionen ausgereizt, denn mehr geht nicht.

Falls du weitere Fragen hast wie man am besten die Daten in solchen Dateien verschlüsselt dann frag.

Gruß Hagen

PS: das was du also programmieren willst ist ein sogenannter "Passwordsafe"
  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 18:41 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