2013-07-04 4 views
7

Я знаю о грубом способе сохранения данных программы, сохраняя их в текстовом файле. Проблема в том, что любой пользователь имеет доступ к текстовому файлу и может манипулировать им. Например, я хочу сохранить и загрузить данные игры, которые меняются по мере продвижения игры. Какие существуют методы хранения таких данных и их доступность только в игровой программе, чтобы другие люди не манипулировали ими?Сохранение и загрузка данных C++

+0

как в случае трещины защита? –

+0

Как редактор уровней в игре. Данные нового уровня сохраняются и могут быть доступны только самой игровой программой. – starhacker

ответ

6

Вы должны хранить данные в двоичных файлах. Но люди все равно могут изменить его в любом случае (например, я часто меняю точку умения или статическую точку своего персонажа в Diablo2: D), поэтому вам следует рассмотреть возможность найти алгоритм вычисления суммы хэша и сохранить его в ваших данных.

3

Вы можете сохранить данные в двоичном файле. Просто напишите и прочитайте биты от и до объекта C++.

+0

Я уверен, что люди, пытающиеся защитить файл, могут выяснить, как преобразовать двоичный файл; нет? – ChiefTwoPencils

+0

Ну, я не знаю, как будут записываться данные. Если данные, которые он хочет записать, это структура, содержащая 2 ints и 10-символьную строку, я думаю, что файл будет просто sizeof (int) + sizeof (int) + 10 * sizeof (char) байтов. И единственный способ, который имел бы смысл, был бы, если бы он был брошен его объектом. – bathtub

+0

То, что я говорю, похоже на то, что сказал @DzungAh в этом ответе. Сохранение данных в двоичном файле не является отличным решением. Это все равно будет редактироваться ... – ChiefTwoPencils

8

Идея состоит в том, чтобы форматировать ваши данные таким образом, чтобы люди не читались. Это можно сделать с помощью ряда методов.

  • Сохранить данные как двоичный файл. Это делает файл трудным для чтения людьми, поэтому необходимо использовать шестнадцатеричный редактор или аналогичную программу. Это также мешает увидеть, где заканчивается одно значение, а другое начинается (в текстовом файле это отображается пробелом). Другое преимущество в том, что ваши файлы будут намного меньше.
  • Шифрование данных. Данные могут быть зашифрованы с использованием различных методов. Это довольно безопасный вариант, однако шифрование может быть медленным, поэтому для очень большого объема данных это может быть не оптимальным в зависимости от того, насколько быстро данные должны быть сохранены/загружены. Также существует проблема хранения ключа шифрования/дешифрования где-нибудь (возможно, в самом файле или в качестве константы в программе).
  • Obfuscation. Это широкий термин, который означает затруднение чтения. Например, две строки могут быть чересстрочными, чтобы сделать как нечитаемые. Обфускация часто включает в себя вставку выделения нежелательных данных, информацию, которая не используется программой, и служит только для того, чтобы запутать потенциальных хакеров.
  • Проверка действительности. В случае, если кто-то модифицирует файл, и они не знают, что делают, очень вероятно, что они окажут некоторое видимое влияние на программу. Таким образом, они могут просто поиграть с файлом, чтобы увидеть, как реагирует ваша программа. Один из способов противодействия этому - проверить, все ли данные находятся в пределах логического диапазона. Данные также могут храниться несколько раз в файле, запутываются или зашифрованы по-разному. Если данные отличаются, вы знаете, что файл был изменен.
Смежные вопросы