Spielstand lokal auf iOS-Gerät speichern ... ist Sicherheit erforderlich?

8

Muss ich die Partitur mit einem Hash speichern, um sie davor zu schützen, von einem Benutzer bearbeitet / betrogen zu werden? Aufgrund meiner neuen Kenntnisse kann der Benutzer diese lokal gespeicherten Daten nicht ansehen und manipulieren, wie zum Beispiel Plist-Dateien. Kann jemand etwas ausarbeiten?

[Bearbeiten] Ich speichere Ergebnisse lokal und lade sie regelmäßig auf die Game Center-Bestenlisten hoch. Selbst wenn das Gerät jailbroken ist, möchte ich Sicherheit haben, um zu verhindern, dass die Scores vom Benutzer manipuliert werden. Was ist ein guter Ansatz?

    
andrewz 01.07.2011, 05:56
quelle

5 Antworten

6

Ich würde das tatsächlich tun:

Speichern Sie es in einem NSDictionary und konvertieren Sie es in ein NSData -Objekt. Jetzt kommt der coole Teil:

Verschlüsseln Sie es in AES mit dieser Klasse:
Ссылка

Dies ist eine militärische Standardverschlüsselung, die ein verschlüsseltes NSData -Objekt zurückgibt. Dann speichern Sie es einfach in der Datei und lesen / schreiben Sie, wann immer es notwendig ist. Ich habe wirklich gute Erfahrungen mit dieser Klasse gemacht und der Benutzer kann nichts damit anfangen.

Viel besser, als es einfach mit NSUserDefaults zu speichern.

Probieren Sie es aus!

    
Pripyat 01.07.2011, 08:28
quelle
3

Ich bin auch neu in der iPhone-Programmierung - habe gerade mein erstes kleines Spiel gebaut und bin gerade dabei, die Game Center-Funktion der nächsten Version hinzuzufügen ( Smiley Lines ;) Ich glaube, viele wären in der gleichen Situation wie ich - wollen nur ein einfaches Hashing, so dass jailbroken Leute nicht leicht die Punktzahl in Benutzer-Standardeinstellungen ändern und verhindert somit Unordnung die Online-Bestenliste.

Wenn das so ist, finde ich die Konvertierung von NSData in AES-Lösung recht kompliziert (für einen iOS-Neuling und für die einfache Notwendigkeit, eine Ganzzahl zu hashen) und etwas übertrieben. Nach einigem Suchen findet sich hier eine großartige Lösung: Matthias Plapper hat die Klasse NSUserDefaults subclassiert, um ein einfaches Hashing mit einem geheimen Schlüssel zu ermöglichen . Super einfach zu bedienen - kopieren Sie die zwei Quellen Dateien und hier ist eine Beispielverwendung:

%Vor%

Danke eine Tonne Matthias!

    
marcwjj 22.07.2012 01:55
quelle
3

Theoretisch kann der Benutzer diese gespeicherten Daten nicht bearbeiten.

Es gibt jedoch Methoden, um auf das gesamte Dateisystem zuzugreifen, damit die Leute den Ordner Ihres Spiels öffnen, die Tabelle bearbeiten und ihre Punktzahlen ändern können.

Wenn ich ein Spiel ohne Online-Bestenlisten machen würde, würde ich mir darüber keine Sorgen machen. Lass sie das gewünschte Ergebnis haben, solange andere Spieler davon nicht betroffen sind.

    
EmilioPelaez 01.07.2011 06:05
quelle
1

Sie können die Noten mit Ihrem eigenen Salt-Wert kodieren und bei Bedarf dekodieren. Dies verhindert, dass der Benutzer einfach die angezeigte Nummer ändert.

    
palaniraja 01.07.2011 06:34
quelle
-1

Ich habe viele iOS-Spiele entwickelt, und ich speichere nur die lokalen Punkte durch:

  • Verwenden der NSUserDefaults-Klasse oder
  • Schreiben Sie sie direkt in eine lokale Konfigurationsdatei ( z. B. , .txt, .plist usw.).

Technisch gesehen können andere Apps die Dateien im Paket Ihrer App nicht anfassen, sodass Sie sich keine Gedanken darüber machen müssen, dass sie bearbeitet werden.

    
Thang Tran 01.07.2011 06:04
quelle

Tags und Links