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)); highscore[k].name:=copy(highscorestringlist[k],pos(';',highscorestringlist[k])+1,length(highscorestringlist[k])-pos(';',highscorestringlist[k])); 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
Narses: 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 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
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!
max1235 hat folgendes geschrieben : |
| 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!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!