Entwickler-Ecke

Sonstiges (Delphi) - Stringlist verschlüsseln


max1235 - Mo 25.01.10 16:01
Titel: Stringlist verschlüsseln
Hallo Leute.

Ich weiß, dass Verschlüsselung schon X-Mal besprochen wurde, habe aber nichts passendes gefunden (Klappt alles nicht-kann ja auch an mir liegen).

Ich habe ein kleines Spiel programmiert. Am Ende wird die Zahl der Punkte sortiert in eine Stringliste geschrieben und dann als txt-Datei gespeichert (Highscore). beim nächsten Speichern eines Highscores wird die Datei wieder geladen. Ein Stringgrid dient in Form2 dann als Tabelle, die die Besten Ergebnisse anzeigt (Bei diesem Aufruf wird es als Array übergeben). Klappt alles super, aber jetzt die Frage:

Wie kann ich die TXT-Datei verschlüsseln, sodass man sie nicht auf anhieb lesen kann?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  k: integer;
  t: integer;
  g: Integer;
begin
name:=inputbox('Spieler''Spieler:''Spieler1');
highscorestringlist:=tstringlist.create;
highscorestringlist.loadfromfile('highscore.txt');
for k := 0 to highscorestringlist.count-1 do
   begin
  highscore[k].punkte:=strtoint(copy(highscorestringlist[k],0,pos(';',highscorestringlist[k])-1));//Vor dem ;
 highscore[k].name:=copy(highscorestringlist[k],pos(';',highscorestringlist[k])+1,length(highscorestringlist[k])-pos(';',highscorestringlist[k]));//Nach dem ;
   end;
for i := 0 to high(highscore)-1 do
begin
if j<>true then
begin
 if summegesamt>highscore[i].punkte then
 begin
 for g := high(highscore)-1 downto i do
    begin
    highscore[g+1].punkte:=highscore[g].punkte;
    highscore[g+1].name:=highscore[g].name;
    end;
    highscore[i].punkte:=summegesamt;
    highscore[i].name:=name;
    j:=true
 end;
end;
end;
highscorestringlist.clear;
for t := 0 to high(highscore)-1 do
   begin
      highscorestringlist.add(inttostr(highscore[t].punkte)+';'+highscore[t].name);
   end;
highscorestringlist.savetofile('highscore.txt');
highscorestringlist.free;
form2.visible:=true;
end;


P.S.: In der TXT-Date steht Punktezahl;Name. Beispiel für TXT-Datei:


100;Max
95;Spieler1
...


Moderiert von user profile iconNarses: Topic aus Datenbanken verschoben am Mo 25.01.2010 um 15:55


elundril - Mo 25.01.10 16:13

Hast du schon mal nach Verschlüsseln hier im Forum gesucht? Da bekommst du ne Liste von relevanten Themen, die kannst du von ihr bis zum mond legen und dann den mann im mond besuchen gehen. ;)

ein zusätzliches Schlüsselwort verrat ich dir: "DEC"

Das ist das Delphi Encryption Compendium (rechtschreibfehler vorbehalten) vom user "negaH" aus der Delphi-Praxis.

lg elundril


max1235 - Mo 25.01.10 16:21

erstmal danke für die antwort. aber ich finde da nur das: http://www.delphipraxis.net/post527274.html und das hilft mir auch nicht wirklich


Narses - Mo 25.01.10 17:04

Moin!

Schau mal hier [http://www.delphi-forum.de/viewtopic.php?p=563921#563921], vielleicht kommst du damit weiter. :idea: ;)

cu
Narses


max1235 - Mo 25.01.10 17:08

danke. ich denke damit versteh ichs einigermaßen. aber warum hab ich das nicht gefunden?


Mastersmind - Mo 25.01.10 18:23

Auf deine Frage hab ich leider keine Antwort...vllt hast du einfach zu eingeschränkt gesucht oder zu schnell aufgegeben...? ;)

Zu deinem Problem...oben hast du geschrieben, dass es "auf Anhieb" nicht ausgelesen werden sollte..da es um ein Spiel geht und du es wirklich bei "auf Anhieb" belassen möchtest, stellt Delphi bereits Verschlüsselungen wie z.B. die XOR-Verschlüsselung bereit.

Für Passwörter oder wichtigere Dateien solltest du aber vorerst auf ausgereifte Fertigkomponenten zurückgreifen, z.B.
http://www.cityinthesky.co.uk/cryptography.html

MfG


max1235 - Mo 25.01.10 20:58

Mit der XOR-Verschlüsselung gibts immer den Fehler "Ungültiger Integer-Wert '" oder so ähnlich. keine ahnung. dachte weil der pc schon nen paar stunden lief und dann habe ich dann den pc neu gestartet, hat aber auch nicht funktioniert. Jetzt hab ich das von Narses einigermaßen verstanden


Mastersmind - Di 26.01.10 00:31

http://forum.delphi-treff.de/showthread.php?t=24444

Wobei wir wieder bei der Frage nach der falschen Art des Suchens wären ;)

MfG


max1235 - Di 26.01.10 09:39

Danke. Mein Problem ist jetzt nur ich habe eine Stringlist. Wenn ich jede Zeile einzeln verschlüssel, dann steht alles noch in einer Zeile. Mit #10#13 klappt das auch nicht.


Narses - Di 26.01.10 12:12

Moin!

user profile iconmax1235 hat folgendes geschrieben Zum zitierten Posting springen:
Mein Problem ist jetzt nur ich habe eine Stringlist. Wenn ich jede Zeile einzeln verschlüssel, dann steht alles noch in einer Zeile. Mit #10#13 klappt das auch nicht.
RC4 erzeugt Binärdaten, da gibt´s keine Zeilen mehr. Du musst die Stringliste mit den Originaldaten als Stream durch den RC4Adapter ziehen und dann in einen Filestream schreiben. Beim Laden dann andersrum. :idea: ;)

Ansonsten: Zeig mal deinen aktuellen Code.

cu
Narses


max1235 - Di 26.01.10 13:52

Danke. klappt gut. super!