Приложение для проверки целостности файлов с помощью контрольных сумм Adler32. Состоит из сервера и GUI-клиента.
- Вычисление контрольной суммы Adler32 локально
- Запрос контрольной суммы файла с сервера
- Сравнение локальной и серверной контрольных сумм
- Просмотр и выбор файлов из защищённой директории на сервере
- Загрузка файлов на сервер
- Система пользователей с разграничением прав
adler32-test/
├── adler_server # Сервер
├── adler_gui # GUI клиент
├── files/ # Директория для файлов на сервере
├── users.dat # База данных пользователей
├── auth.h # Модуль аутентификации
├── secure_channel.h # Протокол передачи данных
├── checksum_worker.* # Вычисление Adler32
└── mainwindow.* # GUI приложение
chmod +x build.sh
./build.shg++ -std=c++11 -pthread -O2 -o adler_server server.cppqmake adler_gui.pro
makeСм. файл buildreq.txt с полным списком зависимостей и инструкциями по установке для различных дистрибутивов Linux.
Минимальные требования:
- g++ с поддержкой C++11
- Qt 5.x
- make
./adler_server 9999Сервер запускается на порту 9999 (можно указать другой порт в аргументах командной строки).
При первом запуске создаётся файл users.dat с дефолтным администратором.
./adler_gui- Введите хост и порт сервера (по умолчанию:
localhost:9999) - Нажмите "Подключиться"
- Введите логин и пароль
- Нажмите "Войти"
Учётная запись по умолчанию:
- Логин:
admin - Пароль:
password
- Нажмите "Обзор..." в секции "Локальный файл"
- Выберите файл
- Нажмите "Вычислить Adler32"
- Нажмите "Обзор..." в секции "Файл на сервере"
- Выберите файл из списка доступных на сервере
- Нажмите "Получить Adler32"
После получения обеих контрольных сумм нажмите "Сравнить локальную и серверную контрольные суммы".
Панель отображается только для пользователей с правами администратора.
- Создать пользователя: введите логин, пароль, опционально отметьте "Права администратора"
- Удалить пользователя: выберите из списка и нажмите "Удалить"
- Нельзя удалить пользователя
admin
- Администратор может менять пароль любому пользователю
- Обычный пользователь может менять только свой пароль
- Нажмите "Загрузить файл на сервер"
- Выберите файл (макс. 1MB)
- Файл будет загружен в директорию
files/
+--------+----------+----------+----------+-------------+----------+----------+
| Magic | Version | Sequence | Timestamp| Data Length | Data Hash| Checksum |
| 0xAD | 4 bytes | 4 bytes | 4 bytes | 4 bytes | 4 bytes | 4 bytes |
+--------+----------+----------+----------+-------------+----------+----------+
| Data (variable length) |
+--------------------------------------------------------------------------------+
| Команда | Описание | Доступ |
|---|---|---|
AUTH username password |
Аутентификация | Все |
HASH filename |
Получить контрольную сумму | Аутентифицированные |
LISTFILES |
Список файлов в files/ |
Аутентифицированные |
UPLOAD filename|data |
Загрузить файл | Аутентифицированные |
LISTUSERS |
Список пользователей | Администраторы |
ADDUSER username password [admin] |
Создать пользователя | Администраторы |
DELUSER username |
Удалить пользователя | Администраторы |
CHANGEPASS username new_password |
Сменить пароль | Администраторы / Владелец |
QUIT |
Закрыть соединение | Все |
users.dat хранит данные в формате:
username:password_hash:is_admin
Пример:
admin:d1270c2a:1
user:abc12345:0
Где:
password_hash— хэш пароля с сольюis_admin—1для администратора,0для обычного пользователя
- Доступ к файлам на сервере ограничен директорией
files/ - Запрещены пути с
..и абсолютные пути - Проверка прав доступа для административных команд
- Сессионная аутентификация (24 часа)
- Qt 5.x
- C++11
- Linux/Unix
Проект создан в образовательных целях.