Бастион 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
 
Улучшение точности теста производительности

В тест производительности добавлен обязательный этап "прогрева" для получения более точных и стабильных результатов.
Теперь каждый отдельный замер предваряется короткой подготовительной операцией, которая не учитывается в итоговом времени.

Тест создания ключа (KDF):
Перед основным тестом выполняется предварительный расчет на 10% от заданного числа раундов.

Тест скорости шифрования:
Перед замером скорости для каждой конфигурации (например, "Самый быстрый", "Надежный" и т.д.) выполняется тестовое шифрование небольшого блока данных (128 КБ).

Зачем это нужно

Современные процессоры в целях энергосбережения не работают постоянно на максимальной частоте.
"Прогрев" заставляет процессор выйти на пиковую и стабильную производительность перед началом замера.

Во время прогрева инструкции и данные, необходимые для вычислений, загружаются в быструю кэш-память процессора.
Это исключает "холодный старт", когда первые операции выполняются медленнее из-за ожидания данных из основной памяти.

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

Как запустить тест

С помощью горячих клавиш Alt + B.
Нажав на кнопку со значком секундомера (
⏱️
) в главном окне программы.

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Повышение производительности функции создания ключа (KDF)

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

Что было сделано

В наиболее нагруженном цикле функции создания ключа было устранено создание временного массива для счетчика на каждой итерации.
За счет использования современных возможностей C++23 (std::byteswap) и более прямого доступа к памяти удалось значительно снизить накладные расходы.

Криптографические константы были объявлены как constexpr.
Это позволяет компилятору на этапе сборки программы встраивать их значения напрямую в код, что открывает возможности для более агрессивных и эффективных оптимизаций.

Тесты показывают, что производительность функции формирования ключа (KDF) увеличилась примерно на 9%.
Это напрямую ускоряет запуск операций шифрования и расшифровки.

Скорость непосредственно самого шифрования данных (после того, как ключ создан) осталась на прежнем высоком уровне.

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

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

Похожие темы