Бастион V16 - Шифрование текста

Улучшена проверка емкости PNG-изображений перед шифрованием

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

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Устранено ограничение на объем вставляемого текста

При вставке в основное текстовое поле большого объема данных (более 64 КБ, что составляло примерно 1700 строк кода), текст обрезался.
Лимит на максимальный объем текста в поле ввода был снят.
Это исправлено путем замены устаревшей команды EM_SETLIMITTEXT на EM_EXLIMITTEXT, что позволяет приложению корректно обрабатывать тексты практически неограниченного размера.

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Оптимизация криптографического ядра "SpongeV16"

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

Внутреннее состояние шифра теперь хранится в std::array вместо std::vector.
Это исключает медленные операции выделения памяти в куче (heap allocation) при каждом создании объекта и улучшает локальность данных, что делает работу процессорного кэша более эффективной.
Тесты показывают прирост скорости только от этого изменения примерно на 3-4%.

Ручное преобразование байтов в 32-битные слова заменено на современную комбинацию memcpy и std::byteswap (C++23).
Это позволяет компилятору использовать высокопроизводительные специализированные инструкции процессора (bswap), дополнительно ускоряя обработку данных.

Эффективное управление памятью

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

Ключевые функции были переписаны для работы с существующими буферами памяти через std::span вместо постоянного создания и возврата новых векторов.
Это значительно сокращает количество медленных операций выделения памяти и уменьшает её фрагментацию при длительной работе.

Качество кода и рефакторинг

Низкоуровневые reinterpret_cast при работе с файлом настроек заменены на современный и безопасный std::bit_cast (C++20), что повышает надежность кода.
Некоторые функции, принимавшие ранее std::vector, теперь используют std::span, что делает их более гибкими и эффективными.

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Функции кодирования и декодирования Base64 (base64_encode, base64_decode) были полностью переписаны.
Устранены ручные манипуляции с индексами и циклами while, которые могли приводить к ошибкам.
Новая реализация использует современный подход с std::span и циклами for с фиксированным шагом.
Это делает код более читаемым, безопасным и декларативным, так как логика обработки порций данных ("чанков") становится очевидной.

В функции потокового шифрования (stream_cipher_process_V16) стандартный цикл for, выполняющий операцию XOR, был заменен на более современный алгоритм std::ranges::transform.
Тестирование показало, что производительность осталась на прежнем уровне, в пределах статистической погрешности.
Это подтверждает, что исходный цикл for уже был скомпилирован максимально эффективно, и скорость операции была ограничена пропускной способностью памяти, а не самими вычислениями.

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы