AES: шифрование и расшифровка — GCM, CBC, CTR и ECB в вашем браузере
AES: шифрование и расшифровка
Шифруйте и расшифровывайте с помощью AES-128, AES-192 или AES-256 (FIPS 197) в режимах GCM (шифрование с аутентификацией), CBC, CTR или ECB. Ключи задаются в виде сырых байтов в шестнадцатеричном виде или Base64 либо выводятся из пароля с помощью PBKDF2-HMAC-SHA256. GCM поддерживает AAD и показывает метку аутентификации отдельно; результаты CBC/CTR/ECB совместимы с enc из OpenSSL. Хеши смотрите в генераторе хешей, ключевые коды аутентификации — в генераторе HMAC, устаревшие шифры — на странице «Устаревшие шифры» в этом разделе. Работает полностью локально — ключи и открытый текст не покидают вкладку. Файлы до 200 МБ.
Всё, что вы вводите здесь, остаётся в этой вкладке — но это не то же самое, что «безопасно для секретов промышленной эксплуатации». Память браузера, расширения и посторонние видят то, что вы вставляете. Используйте эту страницу для обучения, проверки и взаимодействия, а не для работы с реальными данными клиентов.
Направление:Режим:Результат:
GCM = AES-GCM с nonce длиной 12 байт и меткой аутентификации 128 бит (AEAD: конфиденциальность и целостность). Режим по умолчанию, когда важна безопасность.
Ключ(сырые байты: 16, 24 или 32 байта = AES-128/192/256; длину определяет то, что вы вставили)
В hex допускаются пробелы, двоеточия и префиксы 0x.
Соль (hex, 8–16 байт):
Итераций:Размер ключа:
Соль передаётся вместе с шифртекстом — для расшифровки нужны тот же пароль, соль, число итераций и размер ключа. OWASP рекомендует не меньше 600 000 итераций PBKDF2-HMAC-SHA256.
IV / nonce(GCM: 12 байт; CBC/CTR: 16 байт — в hex)
В GCM и CTR никогда не используйте один и тот же nonce с одним ключом.
AAD(дополнительные аутентифицируемые данные — аутентифицируются, но не шифруются; необязательно)
Длина метки:
Метка аутентификации(hex, как выводит эта страница при шифровании — нужна для расшифровки)
Plaintext text (the data to encrypt, UTF-8 encoded)
Выберите файл или перетащите его сюда Файл читается локально блоками по 8 МБ; ничего не загружается. До 200 МБ.
Ciphertext (одна строка: режим, размер ключа, значение; параметры — в строках ниже)
Строки параметров фиксируют точный способ чтения ключа, IV, размер AAD и метку, поэтому скопированный результат можно воспроизвести на другой машине.
Какой режим выбрать? GCM — ответ по умолчанию: он шифрует и аутентифицирует — строка метки делает подмену заметной (попробуйте расшифровать, изменив один байт метки, и страница откажется). CBC скрывает повторы блоков, но не обеспечивает целостности; если без него не обойтись, добавьте HMAC (см. генератор HMAC). CTR превращает AES в потоковый шифр — без дополнения, но повторное использование nonce с тем же ключом катастрофично и в CTR, и в GCM. ECB здесь только для совместимости и обучения: одинаковые блоки открытого текста дают одинаковые блоки шифртекста (знаменитый «пингвин ECB»).
Совместимость с OpenSSL — результаты CBC и CTR с этой страницы (дополнение PKCS#7, сырой ключ) проходят туда и обратно через командную строку openssl enc: openssl enc -aes-256-cbc -K <64-hex-key> -iv <32-hex-iv> -in msg.txt -out msg.enc openssl enc -d -aes-256-cbc -K <key> -iv <iv> -in msg.enc -out msg.txt То же работает с -aes-128-cbc, -aes-192-cbc, -aes-256-ctr (IV длиной 16 байт = начальный блок счётчика). Учтите: openssl encне поддерживает GCM — для шифрования с аутентификацией используйте эту страницу или openssl aesgcm из OpenSSL 3.3+.
Нужен китайский национальный шифр? SM4 (GB/T 32907-2016) — блочный шифр, предписанный в китайской коммерческой криптографии, с тем же блоком 128 бит и размером ключа, что и у AES, но с собственным расписанием ключей и S-блоком — работает на отдельной странице в режимах ECB и CBC: шифрование и расшифровка SM4. Остальные инструменты семейства SM — там же: SM3 (хеш), SM2 (открытый ключ) и SM9 (криптография на основе идентификаторов).
Самопроверка Запускает движки страницы на независимых эталонах: векторы с известным ответом для всех четырёх режимов (сгенерированы независимой нативной реализацией), векторы меток GCM с AAD и без него, перекрёстная проверка движка WebCrypto с чисто JS-движком AES, цикл GCM «шифрование–расшифровка» и отрицательные тесты (изменённая метка и неверный ключ должны приводить к ошибке). Никуда ничего не отправляется.
Шифрование AES с нуля
Вкратце: AES — мировой стандартный блочный шифр — он перемешивает блоки по 16 байт при ключе 128, 192 или 256 бит; а режим, в котором вы его используете (GCM, CBC, CTR, ECB), определяет, как связаны блоки, зачем нужен IV и можно ли обнаружить подмену; выбирайте GCM, если нет причин поступить иначе.
Что собой представляет сам AES (FIPS 197)
Блочный шифр. AES (схема Rijndael, стандартизированная NIST в 2001 году как FIPS 197) шифрует ровно по 16 байт за раз. Длина ключа — 16, 24 или 32 байта — выбирает AES-128, -192 или -256 и число внутренних раундов (10, 12, 14). Каждый раунд перемешивает блок с раундовыми ключами, выведенными из вашего ключа, через таблицы замен, сдвиги строк и перемешивание столбцов. Ни одна практическая атака не ломает сам шифр: реальные сбои почти всегда связаны с ошибками в режиме, IV или управлении ключами, и именно об этом остальная часть страницы.
Зачем вообще режим? Потому что сообщения редко бывают по 16 байт. Режим связывает шифрование блоков: ECB шифрует блоки независимо; CBC складывает по XOR каждый блок с предыдущим шифртекстом; CTR шифрует счётчик и складывает его по XOR с данными, как потоковый шифр; GCM строится на CTR и добавляет метку аутентификации. AES остаётся тем же — режим меняет всё, что касается гарантий.
Ключи и пароли. Ключ AES — это 16, 24 или 32 случайных байта. Человеческий пароль таковым не является: опция «Пароль» на этой странице выводит полноценный ключ с помощью PBKDF2-HMAC-SHA256 (по умолчанию 600 000 итераций, базовый уровень OWASP 2023 — подробности о KDF см. в генераторе HMAC). Никогда не используйте строку пароля напрямую как ключ AES: её энтропия составляет малую долю длины.
Сравнение четырёх режимов
Режим
IV / nonce
Целостность
Примечания
GCM
12 байт, уникален для каждого сообщения
Да — метка 96..128 бит
AEAD: рекомендуемый повсеместно режим по умолчанию (TLS 1.3, SSH, форматы файлов). Также принимает AAD.
CBC
16 байт, непредсказуемый
Нет
Дополнение PKCS#7; классический режим, но нуждается в MAC рядом. Ошибки оракула дополнения — классическая ловушка CBC.
CTR
16-байтный начальный счётчик
Нет
Без дополнения, потоковый, произвольный доступ; повторный nonce под одним ключом раскрывает XOR открытых текстов.
ECB
нет
Нет
Одинаковые блоки → одинаковый шифртекст. Демонстрация «пингвина ECB». Только для совместимости.
Правила для IV в одном абзаце. IV не является секретом — передавайте его рядом с шифртекстом, — но требования к его уникальности различаются: CBC требует непредсказуемый IV; GCM и CTR требуют лишь никогда не повторять один и тот же nonce с тем же ключом (повтор nonce в GCM ещё опаснее: он раскрывает ключ аутентификации). Кнопка «Случайный IV» использует безопасный генератор случайных чисел браузера; кнопка «Все нули» нужна для воспроизведения тестовых векторов, а не для реальных сообщений.
Дополнение. CBC и ECB работают только с целыми блоками, поэтому дополнение PKCS#7 добавляет от 1 до 16 байт, каждый из которых равен длине дополнения. Поэтому шифртекст CBC может вырасти до 16 байт, а расшифровка неверным ключом обычно завершается ошибкой дополнения. CTR и GCM работают как потоковые и не требуют дополнения — длина шифртекста точно равна длине открытого текста (попробуйте пример в режиме CTR: 43 байта на входе, 43 байта на выходе).
CFB и OFB (два оставшихся классических режима) на этой странице не реализованы: они работают как потоковые, как CTR, но без преимуществ перед ним, и в основном встречаются в старых протоколах.
Что добавляет GCM (AEAD, метки, AAD)
Шифрование с аутентификацией. GCM = шифрование CTR + аутентификатор GHASH по шифртексту, IV и AAD. Выходная метка — это отпечаток всего: если изменить хотя бы один бит шифртекста, IV или AAD, метка перестанет совпадать, и получатель может убедиться, что сообщение не изменено и отправлено владельцем ключа. CBC+HMAC даёт то же только при правильной композиции (шифрование, затем MAC) — GCM делает это правильно по своей конструкции.
AAD. Дополнительные аутентифицируемые данные передаются открыто, но покрываются меткой: заголовки протокола, имена файлов, идентификаторы алгоритмов. Получатель должен передать точно такие же байты AAD, иначе проверка метки не пройдёт — в этом и смысл.
Длина метки. Рекомендуется метка по умолчанию 128 бит; более короткие метки (96..120 бит) уменьшают размер, но снижают стойкость к подделке. Ниже 96 бит гарантии безопасности GCM быстро ухудшаются, поэтому эта страница на этом останавливается.
Катастрофа nonce. Повторное использование 12-байтного nonce GCM под одним ключом раскрывает XOR открытых текстов двух сообщений и подключ аутентификации — после этого возможны подделки всех будущих сообщений под этим ключом. Системы, которые не могут гарантировать уникальность, используют варианты, устойчивые к ошибкам с nonce (AES-GCM-SIV, RFC 8452).
Контрольные значения — воспроизведите их на этой странице
Первая строка — знаменитый пример FIPS 197 для одного блока; остальные сгенерированы независимой нативной реализацией (OpenSSL через Node.js) и повторно проверены на движках этой страницы. Вставьте в страницу ключ, IV и входные данные, чтобы воспроизвести каждую строку.
Случай
Входные данные
Ожидаемый результат
AES-128, один блок (в стиле FIPS 197)
key 000102..0f, plaintext 00112233..ff
69c4e0d86a7b0430d8cdb78070b4c55a
AES-128-GCM
key 000102..0f, IV 606162..6b, plaintext 0011..ef ×2
ct 275f095bedfda377063fee326128892188377b410698ed03a022b9971bb4bdbe, tag 87ea7770714048977de2fd8dac645ecf
AES-256-GCM, то же, но с AAD deadbeef
key 000102..1f
ct eacab966ff15e518f48f5390be502fbc2756ccee0dcfff36a282c50bf5593ae7, tag aead900e895c88252d0388d7aefce5c8
AES-256-CBC
key 000102..1f, IV 101112..1f, plaintext 0011..ef ×2
Использование ECB, потому что он не требует IV. Удобство здесь — ловушка: повторы блоков проступают прямо в шифртексте (зашифруйте растровое изображение, и картинка всё равно будет видна). ECB допустим только для отдельных блоков или для случайных ключей ровно по 16 байт — на практике его не выбирают осознанно никогда.
Повторное использование nonce/IV. Для GCM или CTR под одним ключом это та единственная ошибка, которая ломает всё сразу. Системы на основе счётчика (кнопка «Случайный IV» на этой странице) существуют, чтобы сделать её невозможной.
Считать IV секретом. Это не так. Храните его или передавайте рядом с шифртекстом. Скрывать его бессмысленно и это провоцирует повторное использование.
Использование пароля как ключа."hunter2hunter2hunter2hunter2" занимает 32 байта, но это не 256 бит энтропии — это словарное слово с дополнением. Выведите ключ через PBKDF2 (встроено в эту страницу) или сгенерируйте случайный ключ.
Предположение, что CBC обнаруживает подмену. Измените бит в шифртексте CBC, и расшифровка «пройдёт» с незаметно испорченным открытым текстом. Видимой подмену делает только метка GCM (или явный HMAC).
Сравнение шифртекстов GCM на равенство. При случайных nonce одно и то же сообщение шифруется каждый раз по-разному — это свойство, а не ошибка. Детерминированное шифрование — другой, специализированный инструмент.
Часто задаваемые вопросы
AES-128 всё ещё надёжен или нужен 256? Оба варианта стойки против реалистичных противников; лучшие известные атаки отнимают лишь долю запаса. AES-256 важен главным образом для долгосрочных секретов и защиты от квантовых угроз (алгоритм Гровера вдвое снижает стойкость ключа, оставляя AES-256 на уровне около 128 бит).
Почему openssl enc не умеет GCM? Команда enc появилась до AEAD и не может переносить метку; в OpenSSL 3.3 добавлена отдельная команда aesgcm. Результат GCM на этой странице хранит метку в отдельной строке, чтобы вы могли явно переносить оба значения.
Что такое обёртывание ключей (AES-KW)? Это специализированный режим для шифрования других ключей фиксированными 64-битными блоками со своей проверкой целостности. Здесь он не предлагается, потому что его входы и выходы имеют форму ключей, а не сообщений — неправильное использование здесь обычное дело.
Почему шифртекст CTR совпадает по длине с открытым текстом, а CBC длиннее? CTR и GCM работают как потоковые (без дополнения); CBC/ECB дополняют до целого блока из 16 байт по PKCS#7. Разница в длине заложена в конструкции, а не является ошибкой.
Можно ли расшифровать то, что зашифровано в другом месте? Да, если известны точный режим, ключ, IV (а для GCM — метка). Строки результата на этой странице фиксируют всё это, чтобы вы могли переносить параметры между инструментами; блок OpenSSL выше показывает соответствующие командные строки.