2015-03-04 3 views
0

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

Данные, которые мне нужно будет хранить, будут неотъемлемой частью генерации некоторых игровых элементов посредством процедурной генерации - по существу хранения имен, свойств и возможных поведений для этих объектов. Я бы не хотел, чтобы игроки могли легко редактировать файл и изменять значения, чтобы существа общего уровня 1 внезапно сбросили 2 миллиона золотых монет.

Мое намерение в конечном итоге использовать Py2Exe или PyInstaller. Я рассматривал XML, YAML и JSON, но я не уверен, в каком направлении я должен идти, или о том, что я, возможно, не знаю.

Я уверен, что если пользователь захочет достаточно сильно, они могут понять это, но каков наилучший способ сделать неудобным для обычного пользователя манипулирование данными?

+2

Я не думаю, что вам следует решить эту проблему. Во-первых, как вы уже упоминали, это невозможно, чтобы защитить себя. Во-вторых, python не был предназначен для защиты источников приложения. Таким образом, любой, кто решит достаточно, сможет посмотреть ваш код, это означает, что очень сложно защитить данные на месте. У вас не может быть секретного метода шифрования. Кто хочет не испортить веселье, не будет. – luk32

+2

Вы можете использовать JSON и ['gzip'] (https://docs.python.org/3/library/gzip.html). Это сделает содержимое нечитаемым для случайного пользователя, и не более того. –

+2

Вы можете запустить его через простой [xor] (http://en.wikipedia.org/wiki/Bitwise_operation#XOR) ключ. –

ответ

2

Решение невозможно. Вы должны использовать какую-то схему шифрования или подписи, чтобы убедиться, что данные не подделываются в сочетании с обфускацией, так что секретный алгоритм или секретный ключ не могут быть легко извлечены из зашифрованного текста.

Поскольку это касается защиты от несанкционированного доступа, а не конфиденциальности данных, я бы предложил вам использовать алгоритм цифровой подписи. Вы должны генерировать партию открытого и открытого ключа разработчика, использовать закрытый ключ для подписи статических данных и поместить открытый ключ в код с запутанным способом.

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

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

Он также должен быть асимметричным (например, RSA-подпись или ECDSA), поэтому использование HMAC поверх ваших статических данных будет иметь ту же проблему, что и симметричное шифрование.

Смежные вопросы

 Смежные вопросы