Бастион V16 - Шифрование
Цитата: dehote9223 от 15.08.2025, 06:32Создана единая функция DecryptAndVerify для расшифровки данных и проверки их целостности (HMAC).
Ранее схожий код для расшифровки находился в двух местах:
в функции для расшифровки текста в окне (OnDecryptClick) и в функции для проверки сохраненного файла (VerifySavedFile).
Теперь обе функции обращаются к DecryptAndVerify.Благодаря устранению дублирования, дальнейшая поддержка и внесение изменений в криптографическую часть программы стали значительно проще и безопаснее, что снижает риск возникновения ошибок в будущем.
Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
Создана единая функция DecryptAndVerify для расшифровки данных и проверки их целостности (HMAC).
Ранее схожий код для расшифровки находился в двух местах:
в функции для расшифровки текста в окне (OnDecryptClick) и в функции для проверки сохраненного файла (VerifySavedFile).
Теперь обе функции обращаются к DecryptAndVerify.
Благодаря устранению дублирования, дальнейшая поддержка и внесение изменений в криптографическую часть программы стали значительно проще и безопаснее, что снижает риск возникновения ошибок в будущем.
Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
Цитата: dehote9223 от 15.08.2025, 09:30Интегрирован архиватор miniz для сжатия данных перед шифрованием
Это значительно уменьшает итоговый размер зашифрованного текста, что особенно полезно при работе с большими объёмами информации и при создании QR-кодов.
Уменьшенный размер шифротекста особенно полезен при генерации QR-кодов, поскольку теперь в один QR-код можно уместить гораздо больше полезной информации.Сжатие включено постоянно и по умолчанию работает на уровне 6 (Z_DEFAULT_COMPRESSION), что обеспечивает оптимальный баланс между скоростью и степенью сжатия.
Вы можете изменить этот параметр вручную в исходном коде, в функции compress_data, изменив последний аргумент в вызове функции compress2.Доступные варианты:
MZ_NO_COMPRESSION (0): Без сжатия.
MZ_BEST_SPEED (1): Максимальная скорость, минимальное сжатие.
MZ_DEFAULT_COMPRESSION (6): Оптимальный баланс (используется по умолчанию).
MZ_BEST_COMPRESSION (9): Максимальное сжатие, минимальная скорость.Сохранена обратная совместимость с предыдущими версиями.
Ссылка та же
Интегрирован архиватор miniz для сжатия данных перед шифрованием
Это значительно уменьшает итоговый размер зашифрованного текста, что особенно полезно при работе с большими объёмами информации и при создании QR-кодов.
Уменьшенный размер шифротекста особенно полезен при генерации QR-кодов, поскольку теперь в один QR-код можно уместить гораздо больше полезной информации.
Сжатие включено постоянно и по умолчанию работает на уровне 6 (Z_DEFAULT_COMPRESSION), что обеспечивает оптимальный баланс между скоростью и степенью сжатия.
Вы можете изменить этот параметр вручную в исходном коде, в функции compress_data, изменив последний аргумент в вызове функции compress2.
Доступные варианты:
MZ_NO_COMPRESSION (0): Без сжатия.
MZ_BEST_SPEED (1): Максимальная скорость, минимальное сжатие.
MZ_DEFAULT_COMPRESSION (6): Оптимальный баланс (используется по умолчанию).
MZ_BEST_COMPRESSION (9): Максимальное сжатие, минимальная скорость.
Сохранена обратная совместимость с предыдущими версиями.
Ссылка та же
Цитата: dehote9223 от 16.08.2025, 07:27Устранена проблема в темной теме.
При изменении размера шрифта с помощью Ctrl + колесо мыши приводило к сбросу цвета текста со светлого на черный.Ссылка та же
Устранена проблема в темной теме.
При изменении размера шрифта с помощью Ctrl + колесо мыши приводило к сбросу цвета текста со светлого на черный.
Ссылка та же
Цитата: dehote9223 от 16.08.2025, 08:32Устранено дублирование кода при проверке пароля
Ранее, логика для считывания паролей из полей ввода, проверки их на пустоту и сверки на совпадение была скопирована в двух функциях:
OnEncryptClick (при шифровании) и OnDecryptClick (при расшифровке).Это приводило к избыточности кода и потенциальным ошибкам в будущем, если бы потребовалось изменить логику только в одном месте, забыв про другое.
Для централизации этой логики была создана новая единая функция GetAndVerifyPassword.Улучшение удобства использования
В дополнение к стандартному переходу вперед по клавише Tab, была реализована возможность перемещаться назад, на предыдущий элемент, с помощью сочетания Shift + Tab.
Ссылка та же
Устранено дублирование кода при проверке пароля
Ранее, логика для считывания паролей из полей ввода, проверки их на пустоту и сверки на совпадение была скопирована в двух функциях:
OnEncryptClick (при шифровании) и OnDecryptClick (при расшифровке).
Это приводило к избыточности кода и потенциальным ошибкам в будущем, если бы потребовалось изменить логику только в одном месте, забыв про другое.
Для централизации этой логики была создана новая единая функция GetAndVerifyPassword.
Улучшение удобства использования
В дополнение к стандартному переходу вперед по клавише Tab, была реализована возможность перемещаться назад, на предыдущий элемент, с помощью сочетания Shift + Tab.
Ссылка та же
Цитата: dehote9223 от 16.08.2025, 19:47Библиотека для шифрования SpongeV16
disk.yandex.ru/d/W__3-NcboWdYPg
Библиотека для шифрования SpongeV16
disk.yandex.ru/d/W__3-NcboWdYPg
Цитата: dehote9223 от 17.08.2025, 06:48Убрана обязательная ручная инициализация
disk.yandex.ru/d/KI8VPOS1gb1NjAРанее требовалось вручную вызывать эту функцию перед началом работы с библиотекой.
Этот подход мог приводить к ошибкам времени выполнения, если вызов был пропущен, или к усложнению кода при интеграции в большие проекты.Теперь библиотека использует механизм "ленивой (автоматической) инициализации".
Внутренняя подготовка (например, запуск потока для сбора энтропии) выполняется автоматически и потокобезопасно при первом вызове "Encrypt()" или "Decrypt()".
Это реализовано с помощью стандартного механизма C++ "std::call_once".Преимущества
Исключена возможность забыть инициализировать библиотеку, что предотвращает целый класс потенциальных ошибок.
Больше не нужно добавлять в код лишнюю строку для инициализации. API стал чище и интуитивно понятнее.
Инициализация гарантированно выполняется корректно и всего один раз, даже в многопоточных приложениях.
Библиотека теперь следует современным практикам проектирования, скрывая внутренние детали реализации от пользователя.Что нужно сделать
Удалите все вызовы "SpongeV16::Initialize()" из вашего кода.
Убрана обязательная ручная инициализация
disk.yandex.ru/d/KI8VPOS1gb1NjA
Ранее требовалось вручную вызывать эту функцию перед началом работы с библиотекой.
Этот подход мог приводить к ошибкам времени выполнения, если вызов был пропущен, или к усложнению кода при интеграции в большие проекты.
Теперь библиотека использует механизм "ленивой (автоматической) инициализации".
Внутренняя подготовка (например, запуск потока для сбора энтропии) выполняется автоматически и потокобезопасно при первом вызове "Encrypt()" или "Decrypt()".
Это реализовано с помощью стандартного механизма C++ "std::call_once".
Преимущества
Исключена возможность забыть инициализировать библиотеку, что предотвращает целый класс потенциальных ошибок.
Больше не нужно добавлять в код лишнюю строку для инициализации. API стал чище и интуитивно понятнее.
Инициализация гарантированно выполняется корректно и всего один раз, даже в многопоточных приложениях.
Библиотека теперь следует современным практикам проектирования, скрывая внутренние детали реализации от пользователя.
Что нужно сделать
Удалите все вызовы "SpongeV16::Initialize()" из вашего кода.
Цитата: dehote9223 от 19.08.2025, 07:57Улучшена логика кнопки "Расшифровать"
Добавлены проверки перед выполнением расшифровки.
Теперь программа запрашивает подтверждение, если текст уже считается расшифрованным, и выполняет проверку формата данных, чтобы предотвратить технические ошибки при попытке расшифровать обычный текст.Улучшена навигация с помощью клавиши Tab между полями ввода пароля
Ранее при переключении на поле с уже введенным паролем курсор устанавливался в начало текста, что было неудобно для редактирования.
Теперь при переключении фокуса с помощью клавиш Tab и Shift+Tab курсор автоматически перемещается в самый конец текста в поле пароля.
Это позволяет сразу же продолжить ввод или начать удаление символов с помощью Backspace без лишних действий.Внутренние улучшения
Из списка определений был удален макрос IDC_ROUNDS_ENTRY, который присваивал идентификатор элементу управления "Раунды".
Этот идентификатор был определен, но фактически не использовался ни в одном из обработчиков событий, что делало его "мертвым кодом".В главный модуль программы (wWinMain) добавлена дополнительная проверка для корректного освобождения системных ресурсов в случае редкой ошибки.
В гипотетической ситуации, когда программа не могла создать таблицу горячих клавиш (акселераторов), она завершала работу, но не освобождала ранее загруженную библиотеку для текстового поля (Msftedit.dll).Вместо одной глобальной переменной для хранения WNDPROC теперь используется SetPropW/GetPropW для каждого окна индивидуально.
Это устраняет потенциальную ошибку и повышает стабильность кода.Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
Улучшена логика кнопки "Расшифровать"
Добавлены проверки перед выполнением расшифровки.
Теперь программа запрашивает подтверждение, если текст уже считается расшифрованным, и выполняет проверку формата данных, чтобы предотвратить технические ошибки при попытке расшифровать обычный текст.
Улучшена навигация с помощью клавиши Tab между полями ввода пароля
Ранее при переключении на поле с уже введенным паролем курсор устанавливался в начало текста, что было неудобно для редактирования.
Теперь при переключении фокуса с помощью клавиш Tab и Shift+Tab курсор автоматически перемещается в самый конец текста в поле пароля.
Это позволяет сразу же продолжить ввод или начать удаление символов с помощью Backspace без лишних действий.
Внутренние улучшения
Из списка определений был удален макрос IDC_ROUNDS_ENTRY, который присваивал идентификатор элементу управления "Раунды".
Этот идентификатор был определен, но фактически не использовался ни в одном из обработчиков событий, что делало его "мертвым кодом".
В главный модуль программы (wWinMain) добавлена дополнительная проверка для корректного освобождения системных ресурсов в случае редкой ошибки.
В гипотетической ситуации, когда программа не могла создать таблицу горячих клавиш (акселераторов), она завершала работу, но не освобождала ранее загруженную библиотеку для текстового поля (Msftedit.dll).
Вместо одной глобальной переменной для хранения WNDPROC теперь используется SetPropW/GetPropW для каждого окна индивидуально.
Это устраняет потенциальную ошибку и повышает стабильность кода.
Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
Цитата: dehote9223 от 20.08.2025, 06:20Минимальная требуемая версия Windows была понижена с Windows 8 (_WIN32_WINNT 0x0602) до Windows Vista (_WIN32_WINNT 0x0600).
Анализ кода показал, что все используемые функции Windows API (включая криптографические функции bcrypt.dll и функции отчётов об ошибках wer.dll) доступны начиная с Windows Vista.Поскольку тестирование на реальном оборудовании с Windows Vista не проводилось, данная совместимость является теоретической.
Выполнен рефакторинг функции DecryptAndVerify для устранения избыточности кода.
Теперь код унифицирован, стал чище и надёжнее, что снижает вероятность потенциальных ошибок в будущем.Ссылка та же
Минимальная требуемая версия Windows была понижена с Windows 8 (_WIN32_WINNT 0x0602) до Windows Vista (_WIN32_WINNT 0x0600).
Анализ кода показал, что все используемые функции Windows API (включая криптографические функции bcrypt.dll и функции отчётов об ошибках wer.dll) доступны начиная с Windows Vista.
Поскольку тестирование на реальном оборудовании с Windows Vista не проводилось, данная совместимость является теоретической.
Выполнен рефакторинг функции DecryptAndVerify для устранения избыточности кода.
Теперь код унифицирован, стал чище и надёжнее, что снижает вероятность потенциальных ошибок в будущем.
Ссылка та же
Цитата: OnePunchMan от 20.08.2025, 16:55Здравствуйте.
Уважаемый dehote9223, а Вам не кажется, что текст зашифрованный Бастион слишком похож сам на себя, из-за символов в начале и хеша в конце? Вы не думали сделать так, чтобы он выглядел более случайным?
Здравствуйте.
Уважаемый dehote9223, а Вам не кажется, что текст зашифрованный Бастион слишком похож сам на себя, из-за символов в начале и хеша в конце? Вы не думали сделать так, чтобы он выглядел более случайным?
Цитата: dehote9223 от 20.08.2025, 19:12Добавлена настройка параметра Rate (Рэйт)Представьте криптографическую губку как большую миску для смешивания объемом 64 байта.Rate — это размер порции данных, которую мы засыпаем в миску за один раз.Оставшееся место, capacity (ёмкость), — это секретная, защитная часть, которая обеспечивает криптостойкость.Существует прямая зависимость: чем меньше rate, тем выше безопасность, но ниже скорость обработки данных.По умолчанию используется значение 32 — это золотой стандарт, обеспечивающий отличный уровень безопасности (~128 бит) и высокую скорость.Для большинства задач этого более чем достаточно.Однако для защиты особо важных данных вы можете уменьшить это значение, чтобы значительно повысить криптостойкость.Рекомендуемые значения и их влияние:32 байта.Золотой стандарт (рекомендуется). Стандартная скорость (1x).Уровень безопасности ~128 бит.Отличный баланс скорости и надёжности.16 байт.Высокая безопасность. Примерно в 2 раза медленнее.Уровень безопасности ~192 бита.Для очень чувствительных данных.8 байт.Максимальная безопасность. Примерно в 4 раза медленнее.Уровень безопасности ~224 бита.4 байта.Экстремальная безопасность. Примерно в 8 раз медленнее.Уровень безопасности ~240 бит.Новая версия программы может корректно расшифровывать файлы, созданные в любых предыдущих версиях "Бастиона".Оптимизация и упрощение логики сжатияРанее код сначала проверял успешность сжатия, а затем отдельной проверкой — его эффективность (не стал ли сжатый файл больше исходного).Теперь эти два условия объединены в одно.Это небольшой рефакторинг, который делает код более лаконичным и читаемым (принцип Don't Repeat Yourself — DRY).Устранение дублирования кода уменьшает вероятность ошибок при будущих изменениях и упрощает его понимание.
Ссылка та же
![]()
Устранение дублирования кода уменьшает вероятность ошибок при будущих изменениях и упрощает его понимание.
Ссылка та же

Цитата: dehote9223 от 20.08.2025, 19:30OnePunchMan, подробный ответ:
Перед тем как зашифровать текст, программа "Бастион" должна знать, какие параметры использовать:
количество раундов для ключа (20000), количество раундов для губки (24) и значение "рэйт" (32).
Чтобы в будущем можно было расшифровать данные, эти параметры записываются в самое начало зашифрованного сообщения.Строка AABOIBgg как раз и является закодированным представлением этих чисел.
Если не сохранить эти параметры вместе с шифротекстом, то при попытке расшифровки пришлось бы угадывать, с какими именно настройками были зашифрованы данные.
Это сделало бы процесс расшифровки практически невозможным.Это не ослабляет защиту
Эта служебная информация не является секретной.
Безопасность шифрования обеспечивается тремя ключевыми элементами:Секретностью вашего пароля.
Случайной "солью":
Это уникальная случайная добавка, которая генерируется каждый раз при шифровании.
Она защищает от атак с использованием заранее подготовленных таблиц.Случайным "нонсом":
Это уникальное число, которое гарантирует, что даже если вы дважды зашифруете один и тот же текст одним и тем же паролем, результат будет совершенно разным.Соль и нонс записываются в шифротекст сразу после служебных параметров.
Именно благодаря им остальная часть зашифрованного сообщения, как и его хэш в конце, всегда будет уникальной и случайной.Таким образом, видимое "постоянство" в начале шифротекста — это осознанное техническое решение, стандартная практика в криптографии, которая обеспечивает возможность расшифровки данных, не снижая при этом уровень их безопасности.
Компьютер не работает с числами так, как мы.
Он представляет их в виде байтов (последовательностей из нулей и единиц).Программа берёт ваши параметры и выстраивает их в определённом порядке в самом начале зашифрованного пакета.
Количество раундов (20000):
Это число занимает 4 байта.
В шестнадцатеричном виде 20000 — это 4E20.Чтобы записать это в 4 байта, программа добавляет впереди нули: 00 00 4E 20.
Раунды губки (24):
Это число умещается в один байт.
В шестнадцатеричном виде 24 — это 18.Рэйт (32):
Это число тоже занимает один байт.
В шестнадцатеричном виде 32 — это 20.Теперь, если мы выстроим эти байты в одну линию, мы получим самое начало нашего будущего зашифрованного сообщения:
00 00 4E 20 18 20 ... (дальше пойдут случайные соль и нонс)Эта последовательность из байтов — непечатаемые символы.
Чтобы их можно было легко копировать и вставлять как обычный текст, используется кодировка Base64.
Она берёт группы по 3 байта и превращает их в 4 печатных символа.Первая группа (первые 3 байта): 00 00 4E
Алгоритм Base64 преобразует эту тройку байтов в строку AABO.Вторая группа (следующие 3 байта): 20 18 20
Эта комбинация байтов преобразуется в строку IBgg.Соединив эти две части, мы и получаем то самое начало, которое вы заметили: AABOIBgg.
Итог
Буквы AABOIBgg — это не случайный набор символов, а точное и прямое представление чисел 20000, 24 и 32 после их преобразования в байты и последующей кодировки в текстовый формат Base64.
Поскольку эти параметры у вас не меняются, начало зашифрованного текста всегда будет одинаковым.
OnePunchMan, подробный ответ:
Перед тем как зашифровать текст, программа "Бастион" должна знать, какие параметры использовать:
количество раундов для ключа (20000), количество раундов для губки (24) и значение "рэйт" (32).
Чтобы в будущем можно было расшифровать данные, эти параметры записываются в самое начало зашифрованного сообщения.
Строка AABOIBgg как раз и является закодированным представлением этих чисел.
Если не сохранить эти параметры вместе с шифротекстом, то при попытке расшифровки пришлось бы угадывать, с какими именно настройками были зашифрованы данные.
Это сделало бы процесс расшифровки практически невозможным.
Это не ослабляет защиту
Эта служебная информация не является секретной.
Безопасность шифрования обеспечивается тремя ключевыми элементами:
Секретностью вашего пароля.
Случайной "солью":
Это уникальная случайная добавка, которая генерируется каждый раз при шифровании.
Она защищает от атак с использованием заранее подготовленных таблиц.
Случайным "нонсом":
Это уникальное число, которое гарантирует, что даже если вы дважды зашифруете один и тот же текст одним и тем же паролем, результат будет совершенно разным.
Соль и нонс записываются в шифротекст сразу после служебных параметров.
Именно благодаря им остальная часть зашифрованного сообщения, как и его хэш в конце, всегда будет уникальной и случайной.
Таким образом, видимое "постоянство" в начале шифротекста — это осознанное техническое решение, стандартная практика в криптографии, которая обеспечивает возможность расшифровки данных, не снижая при этом уровень их безопасности.
Компьютер не работает с числами так, как мы.
Он представляет их в виде байтов (последовательностей из нулей и единиц).
Программа берёт ваши параметры и выстраивает их в определённом порядке в самом начале зашифрованного пакета.
Количество раундов (20000):
Это число занимает 4 байта.
В шестнадцатеричном виде 20000 — это 4E20.
Чтобы записать это в 4 байта, программа добавляет впереди нули: 00 00 4E 20.
Раунды губки (24):
Это число умещается в один байт.
В шестнадцатеричном виде 24 — это 18.
Рэйт (32):
Это число тоже занимает один байт.
В шестнадцатеричном виде 32 — это 20.
Теперь, если мы выстроим эти байты в одну линию, мы получим самое начало нашего будущего зашифрованного сообщения:
00 00 4E 20 18 20 ... (дальше пойдут случайные соль и нонс)
Эта последовательность из байтов — непечатаемые символы.
Чтобы их можно было легко копировать и вставлять как обычный текст, используется кодировка Base64.
Она берёт группы по 3 байта и превращает их в 4 печатных символа.
Первая группа (первые 3 байта): 00 00 4E
Алгоритм Base64 преобразует эту тройку байтов в строку AABO.
Вторая группа (следующие 3 байта): 20 18 20
Эта комбинация байтов преобразуется в строку IBgg.
Соединив эти две части, мы и получаем то самое начало, которое вы заметили: AABOIBgg.
Итог
Буквы AABOIBgg — это не случайный набор символов, а точное и прямое представление чисел 20000, 24 и 32 после их преобразования в байты и последующей кодировки в текстовый формат Base64.
Поскольку эти параметры у вас не меняются, начало зашифрованного текста всегда будет одинаковым.
Цитата: OnePunchMan от 20.08.2025, 23:27Добрый вечер.
dehote9223 благодарю за подробное разъяснение, я примерно так всё и представлял. Вот только мне кажется, что незнание — тоже в какой-то степени защита. Незнание того, что текст зашифрован и каким образом (чем) он зашифрован. Например можно положить сокровище у всех на виду и пытаться его [simple_tooltip content='и себя в придачу']защитить[/simple_tooltip], а можно в тайне спрятать и не вспоминать о нём без нужды. Сейчас текст зашифрованный через Бастион говорит: "Я [simple_tooltip content='Вполне возможно, учитывая тенденцию борьбы с шифрованием, программы предварительного шифрования, и Бастион в том числе станут популярны (особенно если портируете его на мобильные устройства). И какой-нибудь крипто-аналитик или нейросеть, введя в поисковике "AABOIBgg" поймёт, что текст зашифрован именно Бастион и ни чем иным. Позовёт друзей и они вместе будут искать уязвимости. Или регулятор будет блокировать все сообщения начинающиеся на "AABOIBgg и вариации", Или ещё что-нибудь... ']текст зашифрованный через Бастион V16[/simple_tooltip]". А если он не будет этого говорить — тогда это будет просто текст, которого в мире полно, мало ли что это может быть, может это и не текст вовсе.Если не сохранить эти параметры вместе с шифротекстом, то при попытке расшифровки пришлось бы угадывать, с какими именно настройками были зашифрованы данные.
Параметры и хеш можно [simple_tooltip content='То есть к уже существующему шифрованию добавить маскировку хвостов каким-нибудь простым алгоритмом']дополнительно зашифровать[/simple_tooltip] не меняя соль, нонс и текст, но используя их в качестве [simple_tooltip content='Случайного пароля для того алгоритма, которым будут зашифрованы параметры и хеш. Так же можно использовать хеш пароля пользователя для вычисления мест(а) откуда будет взят(ы) фрагмент(ы) для пароля. Либо использовать фиксированное место']источника случайности[/simple_tooltip], раз они в каждом сообщении разные. А при расшифровке, сначала расшифровывать служебную информацию, а после само сообщение.
Конечно же всё вышеперечисленное это просто идея на Ваше рассмотрение. Я не программист и не криптограф, и вполне возможно сморозил глупость.
Благодарю, что делитесь своими наработками
Добрый вечер.
dehote9223 благодарю за подробное разъяснение, я примерно так всё и представлял. Вот только мне кажется, что незнание — тоже в какой-то степени защита. Незнание того, что текст зашифрован и каким образом (чем) он зашифрован. Например можно положить сокровище у всех на виду и пытаться его защитить, а можно в тайне спрятать и не вспоминать о нём без нужды. Сейчас текст зашифрованный через Бастион говорит: "Я текст зашифрованный через Бастион V16". А если он не будет этого говорить — тогда это будет просто текст, которого в мире полно, мало ли что это может быть, может это и не текст вовсе.
Если не сохранить эти параметры вместе с шифротекстом, то при попытке расшифровки пришлось бы угадывать, с какими именно настройками были зашифрованы данные.
Параметры и хеш можно дополнительно зашифровать не меняя соль, нонс и текст, но используя их в качестве источника случайности, раз они в каждом сообщении разные. А при расшифровке, сначала расшифровывать служебную информацию, а после само сообщение.
Конечно же всё вышеперечисленное это просто идея на Ваше рассмотрение. Я не программист и не криптограф, и вполне возможно сморозил глупость.
Благодарю, что делитесь своими наработками
Цитата: dehote9223 от 21.08.2025, 05:58OnePunchMan, программа публикуется с открытым исходным кодом, попытки скрыть формат шифротекста не имеют смысла.
Принцип Керкгоффса
Безопасность криптографической системы не должна зависеть от секретности самого алгоритма или формата данных.
Она должна полагаться исключительно на секретность ключа (пароля).
Любой злоумышленник, имея доступ к исходному коду "Бастиона", сможет легко написать программу, которая будет определять такой "спрятанный" формат.
OnePunchMan, программа публикуется с открытым исходным кодом, попытки скрыть формат шифротекста не имеют смысла.
Принцип Керкгоффса
Безопасность криптографической системы не должна зависеть от секретности самого алгоритма или формата данных.
Она должна полагаться исключительно на секретность ключа (пароля).
Любой злоумышленник, имея доступ к исходному коду "Бастиона", сможет легко написать программу, которая будет определять такой "спрятанный" формат.
Цитата: dehote9223 от 21.08.2025, 10:11Масштабируемый QR-код
Теперь окно с QR кодом можно развернуть на весь экран с помощью стандартной кнопки "Развернуть".
Размер окна можно плавно менять как мышью, так и с помощью горячих клавиш (Alt + ↑ для увеличения, Alt + ↓ для уменьшения).
Это нововведение будет полезно, если камера вашего смартфона не может сфокусироваться или отсканировать QR-код.
Ссылка та же
Масштабируемый QR-код
Теперь окно с QR кодом можно развернуть на весь экран с помощью стандартной кнопки "Развернуть".
Размер окна можно плавно менять как мышью, так и с помощью горячих клавиш (Alt + ↑ для увеличения, Alt + ↓ для уменьшения).
Это нововведение будет полезно, если камера вашего смартфона не может сфокусироваться или отсканировать QR-код.
Ссылка та же