Datei verschließen > Highscore
Datei verschließen > Highscore
Sehr geehrte Leserinnen und Leser,
also ich habe folgende Frage, auf die ich bis jetzt keine Lösung gefunden habe. Also ich habe ein kleines Spiel programmiert, bei dem man halt mit einem Auto bei Hindernissen vorbei kommen muss... Wenn man an ein solches Hindernis stoßt wird halt der Timer angehalten, und die Daten in die .txt-Datei eingetragen und der Highscore wird aktualisiert. Nun habe ich das Problem, dass man die TXT-Datei natürlich öffnen kann und Daten ändern, die dann ein falsches Ergebnis repräsentieren. Nun wollte ich gerne wissen, wie ich das lösen könnte, ohne gleich den ganzen Text mit einer Methode zu verschlüsseln. Ich hoffe mir kann wer helfen.
Mit freundlichen Grüßen
Kosmo
also ich habe folgende Frage, auf die ich bis jetzt keine Lösung gefunden habe. Also ich habe ein kleines Spiel programmiert, bei dem man halt mit einem Auto bei Hindernissen vorbei kommen muss... Wenn man an ein solches Hindernis stoßt wird halt der Timer angehalten, und die Daten in die .txt-Datei eingetragen und der Highscore wird aktualisiert. Nun habe ich das Problem, dass man die TXT-Datei natürlich öffnen kann und Daten ändern, die dann ein falsches Ergebnis repräsentieren. Nun wollte ich gerne wissen, wie ich das lösen könnte, ohne gleich den ganzen Text mit einer Methode zu verschlüsseln. Ich hoffe mir kann wer helfen.
Mit freundlichen Grüßen
Kosmo
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Datei verschließen > Highscore
verschlüsseln,
einfache methode:
Du estelst irgendwie beim speichern ein Hash wert.
hab gerade keine Zeit..
einfache methode:
Du estelst irgendwie beim speichern ein Hash wert.
hab gerade keine Zeit..
Code: Alles auswählen
Signatur := nil;
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Datei verschließen > Highscore
Wenn du nicht vrschlüsseln willst, dann tarnen und täuschen.
Schreibe mehre Werte nicht als Text sondern binär und lege dann eine Prüfsumme darüber. wenn ein Wert geändert wird, stimmt die Prüfsume nicht mehr und es ist klar as da wer gefummelt hat.
Schreibe mehre Werte nicht als Text sondern binär und lege dann eine Prüfsumme darüber. wenn ein Wert geändert wird, stimmt die Prüfsume nicht mehr und es ist klar as da wer gefummelt hat.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 144
- Registriert: So 22. Aug 2010, 16:06
- OS, Lazarus, FPC: Backtrack 5 RC4 - 64bit Gnome
- CPU-Target: 64bit
- Wohnort: NRW
- Kontaktdaten:
Re: Datei verschließen > Highscore
Verschlüsselte Hexcodes sind meistens der Standard für kleinere Spiele. Es gibt aber recht viele Möglichkeiten, deine Spielstände zu verschlüsseln bzw. den Inhalt darin. Hash wäre z.B. eine, da würde sich SHA-1 oder md5 anbieten.
-
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 10:38
- OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
- Wohnort: Hessen
- Kontaktdaten:
Re: Datei verschließen > Highscore
Ich kenne mich mit dem Speichern von Dateien nicht sonderlich aus. Es gibt aber meines Wissens die Methode, den Score als FileStream o.ä. zu speichern - d.h. die Zieldatei ist nicht mehr lesbar, wenn man sie mit einem Editor öffnet.
Viele Grüße, Euklid
Viele Grüße, Euklid
Re: Datei verschließen > Highscore
Danke für die Infos, doch leider kann ich damit noch nicht so viel anfangen, da ich noch nicht so viel Erfahrung mit Kryptographie gesammelt habe.
Wäre wirklich nett, wenn mir das wer genauer erläutern könnte
Also bedanke mich schonmal.
Mit freundlichen Grüßen
Kosmo
Wäre wirklich nett, wenn mir das wer genauer erläutern könnte

Also bedanke mich schonmal.
Mit freundlichen Grüßen
Kosmo
-
- Beiträge: 144
- Registriert: So 22. Aug 2010, 16:06
- OS, Lazarus, FPC: Backtrack 5 RC4 - 64bit Gnome
- CPU-Target: 64bit
- Wohnort: NRW
- Kontaktdaten:
Re: Datei verschließen > Highscore
Es gibt im Bereich verschiedene Verschlüsselungsmethoden z.B. Vignere oder Caesar. Am besten schaust du da mal bei Wikipedia oder Google. Es gibt im Bereich der Kryptographie aber auch so genannte Prüfsummen. Diese Prüfsummen ändern sich jedes mal, wenn eine Datei geändert wird. Es gibt verschiedene Algorithmen, die diese Prüfsummen erstellen. Dazu zählen zum Beispiel der MD5 oder SHA-1 Algorithmus. Wenn du die verschiedenen Algorithmen vergleichen willst,schaust du ebenfalls besser bei Google.Kosmo hat geschrieben:Danke für die Infos, doch leider kann ich damit noch nicht so viel anfangen, da ich noch nicht so viel Erfahrung mit Kryptographie gesammelt habe.
Wäre wirklich nett, wenn mir das wer genauer erläutern könnte
Also bedanke mich schonmal.
Mit freundlichen Grüßen
Kosmo
Was binär oder hexadezimal Zahlen sind, brauche ich ja denke ich mal nicht zu erläutern.
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: Datei verschließen > Highscore
Eine einfache Methode, die ziemlich einfach geht:
Jetzt packst du deine Highscore in einen String und speicherst das Ergebnis von BerechneSpeicherString ab.
Beim Einlesen bekommst du die Daten zurück, indem du die eingelesene Datei an LeseSpeicherString übergibst und das Ergebnis benutzt.
Code: Alles auswählen
uses md5;
const geheimwort = 'Doof'; // dieses Geheimwort muss der Angreifer wissen, falls er das knacken will
falschtext = 'DU HAST GECHEATET'; // Dieser Text wird eingesetzt, falls jemand gecheatet hat
function BerechneSpeicherString(eingabe: string): string; // hängt die Prüfsumme an
begin
result:=eingabe+'####'+md5print(md5sum(eingabe+geheimwort));
end;
function LeseSpeicherString(eingabe: string): string; // Prüft die Daten, ob was geändert wurde
var xpos: integer;
begin
xpos:=pos('####', eingabe); // Position des Trenners
result:=copy(eingabe, 1, xpos-1); // die Daten extrahieren
if md5print(md5sum(result+geheimwort))<>copy(eingabe, xpos+4, 100000) then result:=FalschText; // testen, ob die Prüfsumme gleich bleibt
end;
Beim Einlesen bekommst du die Daten zurück, indem du die eingelesene Datei an LeseSpeicherString übergibst und das Ergebnis benutzt.