Возможно ли создавать и взаимодействовать с запароленными текстовыми файлами через Python?
Я пишу игру при помощи pygame, для сохранения стандартных настроек сложности и прогресса игрока я решил использовать текстовые файлы. Очевидно, если не поставить пароли на текстовики, игрок сможет их изменить и сжульничать. Моя игра, конечно не очень сложная(буквально сапёр) и читерить в ней нет особого смысла, но всё же хотелось бы не давать игроку возможности манипуляции с файлами. Отсюда вытекает вопрос: "Возможно ли создавать и взаимодействовать с запароленными текстовыми файлами через Python?"
Если возможно, то буду благодарен за пример реализации.
Ответы (1 шт):
Автор решения: chagins
→ Ссылка
Как вам вариант зашифровать настройки?
import json
from cryptography.fernet import Fernet
###########################################
# создание ключа шифрования
###########################################
# генерим ключ шифрования
key = Fernet.generate_key()
# пишем в файл setting1.bin ключ шифрования
with open(r'C:\ВАШ_ПУТЬ\setting1.bin', 'wb') as file_key:
file_key.write(bytes(key))
############################################
# шифруем настройки и записываем в файл
############################################
# считываем ключ шифрования из файла setting1.bin
with open(r'C:\ВАШ_ПУТЬ\setting1.bin', 'rb') as file_key:
key = file_key.read()
# Используем считанный ключ шифрования
encrypt_key = Fernet(key)
# например есть словарь с настройками
u_settings = {'set1': 10, 'set2': 'any', 'set3': 20}
# переводим настройки в байты
u_settings_b = json.dumps(u_settings, indent=2).encode('utf8')
# шифруем настройки
u_settings_enc = encrypt_key.encrypt(u_settings_b)
# записываем в файл setting2.bin зашифрованные настройки
with open(r'C:\ВАШ_ПУТЬ\setting2.bin', 'wb') as file_enc:
file_enc.write(u_settings_enc)
############################################
# читаем настройки из файла и дешифруем
############################################
# считываем ключ шифрования из файла setting1.bin
key = None
with open(r'C:\ВАШ_ПУТЬ\setting1.bin', 'rb') as file_key:
key = file_key.read()
# Используем считанный ключ шифрования
encrypt_key = Fernet(key)
# переменная для хранения зашифрованных настроек
u_settings_enc = None
# читаем из файла setting2.bin зашифрованные настройки
with open(r'C:\ВАШ_ПУТЬ\setting2.bin', 'rb') as file_enc:
u_settings_enc = file_enc.read()
# расшифровываем настройки в байтах
u_settings_b = encrypt_key.decrypt(u_settings_enc)
# переводим настройки в словарь
u_settings = json.loads(u_settings_b)