# README: Шифрование и Дешифрование Текста (Sodium Compatible)

Это простое GUI-приложение на Python (PyQt6) для шифрования и дешифрования текста с использованием библиотеки PyNaCl (совместимо с libsodium). Оно работает в режиме симметричного шифрования: один и тот же ключ используется для шифрования и дешифрования.

## Установка и Запуск
1. Убедитесь, что у вас установлен Python 3 (рекомендуется 3.8+).
2. Запустите файл `RUN_Sodium_Compatible.bat` (он автоматически проверит и установит зависимости: PyQt6, PyNaCl).
3. Если батник не сработал, вручную установите пакеты: `pip install PyQt6 pynacl`.
4. Запустите скрипт: `python Sodium_Compatible.py`.

Приложение откроется в окне с тёмной темой.

## Как Пользоваться
- **Интерфейс**:
  - Вверху: Поле для ввода **ключа шифрования** (пароль, скрытый режим ввода). Ключ обязателен для любых операций.
  - Слева (синий блок): Дешифрование — вставьте зашифрованный текст, нажмите "Дешифровать". Результат ниже.
  - Справа (зелёный блок): Шифрование — вставьте текст, нажмите "Шифровать". Результат ниже.
  - Кнопки "Скопировать" для копирования результатов в буфер.
  - Внизу: Логи с timestamp (зелёный — успех, красный — ошибка). Кнопки для очистки логов и всех полей.

- **Шифрование**:
  1. Введите ключ. 
  2. В правом блоке введите текст.
  3. Нажмите "Шифровать".
  4. Получите base64-строку (nonce + ciphertext).

- **Дешифрование**:
  1. Введите тот же ключ.
  2. В левом блоке вставьте base64-строку.
  3. Нажмите "Дешифровать".
  4. Получите оригинальный текст (если ключ верный; иначе ошибка).

## Ключ Шифрования (Важно!)
- Ключ — это ваш пароль (строка любой длины). Он хэшируется в 256-битный ключ с помощью SHA-256.
- **Запомните ключ!** Он не сохраняется в приложении. Без него дешифрование невозможно.
- Используйте один и тот же ключ для шифрования и дешифрования одного текста.
- Рекомендации: Делайте ключ сложным (буквы, цифры, символы, >12 символов). Не используйте простые пароли.
- Безопасность: Шифрование стойкое (XSalsa20 + Poly1305), но ключ — слабое звено. Не передавайте ключ открыто.

## Ошибки
- "Ключ не может быть пустым" — введите ключ.
- "Текст не может быть пустым" — заполните поле.
- "Ошибка дешифрования" — неверный ключ или повреждённый текст.

Приложение не хранит данные, всё локально. Для вопросов — проверьте логи.