Возможно ли создавать и взаимодействовать с запароленными текстовыми файлами через 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)
→ Ссылка