Инструмент шифрования AES — GCM, CBC и CTR
Бесплатное онлайн-шифрование AES — AES-128/192/256, GCM/CBC/CTR, парольная фраза (PBKDF2) или необработанный ключ. Работает на 100% в браузере, ничего не загружается на сервер.
Дополнительные параметры
Никогда не используйте один IV повторно с одним и тем же ключом. Оставьте поле пустым, чтобы сгенерировать безопасный случайный IV.
Что такое шифрование AES?
AES (Advanced Encryption Standard) — это симметричный блочный шифр, стандартизированный NIST в FIPS 197 в 2001 году на основе конструкции Rijndael, разработанной Джоаном Дэменом и Винсентом Рэйменом. Он шифрует данные фиксированными 128-битными блоками с использованием 128-, 192- или 256-битного ключа, и один и тот же ключ используется как для шифрования, так и для расшифровки. Это рабочая лошадка современной криптографии, защищающая всё — от трафика HTTPS до шифрования дисков.
Сырой блочный шифр перемешивает лишь один 16-байтовый блок, поэтому AES всегда работает внутри режима работы, который связывает блоки между собой. Этот инструмент предлагает три таких режима, все они нативно реализованы в Web Crypto API браузера: GCM, CBC и CTR. GCM (Galois/Counter Mode, NIST SP 800-38D) рекомендуется по умолчанию, потому что он аутентифицированный — он выдаёт 128-битный тег аутентификации вместе с шифротекстом, поэтому любая подмена обнаруживается при расшифровке. CBC и CTR обеспечивают только конфиденциальность; сами по себе они не могут сказать вам, был ли изменён шифротекст, поэтому TLS 1.3 (RFC 8446) отказался от всех наборов шифров на основе CBC в пользу аутентифицированных режимов вроде GCM.
Вы заметите, что здесь нет режима ECB, и это сделано намеренно. ECB шифрует каждый одинаковый блок открытого текста в одинаковый блок шифротекста, поэтому крупномасштабная структура данных просвечивает напрямую — знаменитое изображение «ECB-пингвина» остаётся узнаваемым пингвином и после шифрования. Web Crypto API именно по этой причине не реализует ECB (там есть только AES-CBC, AES-CTR и AES-GCM), и мы поступаем так же. Если вам нужно взаимодействовать с устаревшей системой, использующей ECB, воспринимайте это как повод её обновить, а не как повод воспроизводить эту слабость.
Поскольку большинство людей вводят парольную фразу, а не случайный 32-байтовый ключ, инструмент выводит ключ AES из вашей парольной фразы с помощью PBKDF2-HMAC-SHA256 при 600 000 итераций и случайной 16-байтовой соли — в соответствии с текущими рекомендациями OWASP по хранению паролей (и NIST SP 800-132, который требует соль не менее 128 бит). Это делает перебор слабой парольной фразы медленным, но не является волшебством: это инструмент для изучения режимов, отладки шифротекста и разовых личных данных — а не для защиты боевых секретов, которым место в выделенной системе управления ключами. Чтобы получить надёжную парольную фразу, сгенерируйте её с помощью нашего генератора случайных паролей; для настоящего случайного ключа используйте генератор секретных ключей.
// AES-256-GCM with a passphrase (PBKDF2-HMAC-SHA256, 600,000 iterations).
// Identical code runs in the browser and in Node.js 20+ via Web Crypto.
async function aesGcmEncrypt(plaintext, passphrase) {
const enc = new TextEncoder();
const salt = crypto.getRandomValues(new Uint8Array(16));
const iv = crypto.getRandomValues(new Uint8Array(12));
const baseKey = await crypto.subtle.importKey(
'raw', enc.encode(passphrase), 'PBKDF2', false, ['deriveKey']);
const key = await crypto.subtle.deriveKey(
{ name: 'PBKDF2', salt, iterations: 600000, hash: 'SHA-256' },
baseKey, { name: 'AES-GCM', length: 256 }, false, ['encrypt']);
const ct = new Uint8Array(await crypto.subtle.encrypt(
{ name: 'AES-GCM', iv }, key, enc.encode(plaintext)));
const packed = new Uint8Array([...salt, ...iv, ...ct]); // salt(16) | iv(12) | ct+tag
return btoa(String.fromCharCode(...packed)); // self-contained Base64
} Ключевые возможности
Аутентифицированное шифрование GCM по умолчанию
GCM выдаёт шифротекст плюс 128-битный тег аутентификации, поэтому расшифровка явно завершается ошибкой, если изменён хотя бы один байт. CBC и CTR доступны в один клик — на случай, если вам нужно взаимодействовать с системами, которые их используют.
Самодостаточный шифротекст
Режим парольной фразы упаковывает случайную соль, IV и тег в одну строку Base64, поэтому тому, кто расшифровывает, нужна только парольная фраза — нет отдельных полей, которые можно потерять или забыть скопировать.
Парольная фраза или необработанный ключ
Введите парольную фразу (растягиваемую с помощью PBKDF2-HMAC-SHA256, 600 000 итераций) или вставьте точный ключ длиной 128/192/256 бит в hex или Base64 — живой значок с числом байт подтвердит длину.
Вывод, совместимый с OpenSSL
Включите режим OpenSSL, чтобы получить формат Salted__, который читают команда openssl enc и CryptoJS, с показом эквивалентной команды CLI в реальном времени, чтобы вы могли воспроизвести её в терминале.
100% в вашем браузере
Каждый байт шифруется локально с помощью Web Crypto API. Откройте вкладку «Сеть» — вы не увидите ничего, покидающего страницу, инструмент даже работает офлайн.
Вывод в Base64 или Hex
Скопируйте результат в той кодировке, которую ожидает целевая система, и проверьте длины соли, IV, шифротекста и тега на полосе разбивки по сегментам.
Примеры шифрования AES
GCM + парольная фраза (самодостаточный, недетерминированный)
Быстрая бурая лиса перепрыгивает через ленивого пса.
соль (16 Б) + IV (12 Б) + шифротекст + тег (16 Б), в кодировке Base64 — новое значение при каждом запуске
При режиме GCM, размере ключа 256, типе ключа «Парольная фраза» и парольной фразе hunter2 это предложение шифруется в единую самодостаточную строку Base64. Зашифруйте его дважды — и получите два совершенно разных результата, это сделано намеренно. Режим парольной фразы генерирует свежую 16-байтовую соль и свежий 12-байтовый IV при каждом шифровании, поэтому одинаковый открытый текст никогда не даёт одинаковый шифротекст, и наблюдатель не может определить, что два сообщения совпадают. Полоса сегментов под результатом показывает точную раскладку: соль, затем IV, затем шифротекст с добавленным 128-битным тегом GCM. Чтобы расшифровать, получателю нужны только парольная фраза, тот же режим и размер ключа — соль, IV и тег передаются внутри строки.
Вывод, совместимый с OpenSSL (CBC + парольная фраза)
Attack at dawn!
U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=
Включите режим, совместимый с OpenSSL: режим CBC, тип ключа «Парольная фраза», парольная фраза correct-horse, KDF PBKDF2 и 10 000 итераций. Инструмент выдаёт формат OpenSSL Salted__: Base64-строку, всегда начинающуюся с U2FsdGVkX1 — это кодировка Base64 8-байтового заголовка Salted__. Поскольку каждый раз генерируется новая случайная 8-байтовая соль, точная строка меняется при каждом запуске, но любая из них расшифровывается в командной строке командой: echo 'U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 10000 -pass pass:correct-horse -base64 -A — которая выводит Attack at dawn!. Выберите EVP-MD5 вместо PBKDF2, чтобы соответствовать CryptoJS или OpenSSL 1.0.2 и более ранним версиям. Обратите внимание, что openssl enc не поддерживает GCM, поэтому режим OpenSSL работает только с CBC.
Как зашифровать текст с помощью AES
- 1
Выберите режим и размер ключа
Оставьте режим на GCM (рекомендуется) и размер ключа на 256 — это самый надёжный разумный вариант по умолчанию. Переключайтесь на CBC или CTR только если этого требует система, с которой вы работаете.
- 2
Выберите парольную фразу или необработанный ключ
Оставьте тип ключа на «Парольная фраза» и введите надёжную парольную фразу, либо переключитесь на «Необработанный ключ» и вставьте точный ключ длиной 128/192/256 бит в hex или Base64. Значок с числом байт подтвердит, что длина вашего необработанного ключа корректна.
- 3
Введите текст для шифрования
Введите или вставьте открытый текст. Шифрование выполняется автоматически по мере ввода, полностью в вашем браузере — без нажатия кнопки и без загрузки на сервер.
- 4
Скопируйте самодостаточный шифротекст
Результат в Base64 справа уже содержит соль, IV и тег аутентификации. Используйте полосу сегментов, чтобы увидеть раскладку байт, затем нажмите «Копировать». Переключите кодировку вывода на Hex, если этого ожидает целевая система.
- 5
Расшифруйте обратно, когда потребуется
Передайте получателю шифротекст, парольную фразу и тот же режим и размер ключа, либо откройте страницу расшифровки AES, чтобы обратить процесс самостоятельно.
Частые ошибки шифрования AES
Путаница между парольной фразой и необработанным ключом
Необработанный ключ должен быть ровно 16, 24 или 32 байтами случайных данных (введённых в hex или Base64); парольная фраза — это любой текст, который сначала нужно растянуть с помощью KDF. Если выбрать «Необработанный ключ» и вставить человеческую парольную фразу, это либо даст ошибку длины, либо создаст слабый ключ.
Key type: Raw key Key (hex): correct horse battery staple (not hex, not 32 bytes)
Key type: Passphrase Passphrase: correct horse battery staple (stretched with PBKDF2)
Повторное использование IV с одним и тем же ключом
IV должен быть уникальным для каждого сообщения при данном ключе. Его повторное использование фатально для GCM (может привести к утечке ключа аутентификации) и ломает конфиденциальность для CBC и CTR. Позвольте инструменту генерировать новый случайный IV каждый раз.
// same key, same IV for two messages encrypt(key, iv, a); encrypt(key, iv, b);
// fresh random IV each time (the default) encrypt(key, randomIV(), a);
Потеря соли, IV или тега
Если скопировать только байты шифротекста и отбросить добавленные впереди соль/IV — или добавленный в конце тег GCM — данные никогда не удастся расшифровать. Сохраняйте всю самодостаточную строку целиком, а не только её середину.
stored = ciphertext // salt + IV + tag thrown away
stored = salt + iv + ciphertext + tag // the full Base64 string
Ожидание, что вывод GCM будет совпадать при каждом запуске
GCM (и режим парольной фразы в целом) использует случайную соль и IV, поэтому один и тот же текст каждый раз шифруется в другую строку Base64. Это особенность безопасности, а не ошибка — она означает, что перехватчик не может определить, что два шифротекста шифруют одно и то же сообщение.
assert(encrypt(msg) === encrypt(msg)) // fails — and should
assert(decrypt(encrypt(msg)) === msg) // this is what must hold
Что можно делать с шифрованием AES
- Изучите поведение режимов AES
- Переключайтесь между GCM, CBC и CTR с одним и тем же входом, чтобы увидеть, как меняются аутентификация, длина IV и размер шифротекста. Практический способ понять, что именно определяет NIST SP 800-38D.
- Получите шифротекст, который прочитает другая система
- Сгенерируйте результат в формате OpenSSL Salted__ (или как необработанный ключ плюс IV), чтобы бэкенд, скрипт или коллега, использующий openssl или криптобиблиотеку, мог расшифровать его без проблем.
- Зашифруйте короткую заметку или фрагмент
- Защитите разовый личный текст — восстановительную фразу, которую вы переносите между устройствами, фрагмент в тикете поддержки — парольной фразой, которую знаете только вы. Не подходит для регулируемых или боевых секретов.
- Спроектируйте формат шифрования
- Определите здесь раскладку соли/IV/тега и настройки KDF ещё до написания кода, используя разбивку по сегментам, чтобы подтвердить порядок байт и длины.
- Сгенерируйте тестовые векторы
- Создайте известный шифротекст с фиксированной парольной фразой и режимом, чтобы использовать его в собственных тестах расшифровки, а затем проверьте цикл на странице расшифровки AES.
Режимы AES и формирование ключа
- GCM (Galois/Counter Mode) — аутентифицированный, рекомендуется
- Конфиденциальность плюс 128-битный тег аутентификации (NIST SP 800-38D). Используется 96-битный (12-байтовый) IV, генерируемый случайно при каждом шифровании, а шифрование и расшифровка хорошо распараллеливаются. Единственное правило, которое нельзя нарушать: никогда не используйте один IV повторно с одним и тем же ключом. SP 800-38D ограничивает один ключ примерно 2^32 случайно сгенерированными IV, а повтор раскрывает XOR двух открытых текстов и может даже выдать ключ аутентификации, защищающий тег. Лучший выбор почти для всего.
- CBC (Cipher Block Chaining) — только конфиденциальность
- Каждый блок объединяется через XOR с предыдущим блоком шифротекста, используя случайный 16-байтовый IV. Встроенной аутентификации нет, поэтому его нужно сочетать с отдельным MAC — по схеме encrypt-then-MAC, например с помощью нашего генератора HMAC — и он исторически подвержен атакам типа «оракул дополнения» (Vaudenay, EUROCRYPT 2002). Предлагается здесь для совместимости с OpenSSL и более старыми системами.
- CTR (Counter) — только конфиденциальность, потоковый режим
- Превращает AES в поточный шифр, шифруя счётчик, поэтому подходит любая длина в байтах без дополнения, а блоки свободно распараллеливаются. Как и CBC, сам по себе не обеспечивает целостности, а повторное использование счётчика/IV с одним ключом катастрофично. Полезен, когда нужен произвольный доступ или потоковая семантика.
- ECB — не предлагается (осознанно)
- Electronic Codebook шифрует каждый блок независимо, поэтому одинаковые блоки открытого текста дают одинаковый шифротекст, и структура данных просвечивает — печально известный «ECB-пингвин». Web Crypto API намеренно не реализует его, и мы тоже. Если устаревшая сторона требует ECB, относитесь к этому как к ошибке, которую нужно исправить, а не как к формату, который нужно воспроизводить.
- Формирование ключа: 600 000 против 10 000 против 1 итерации
- В режиме парольной фразы по умолчанию этот инструмент использует PBKDF2-HMAC-SHA256 при 600 000 итераций (тот же хеш SHA-256, применённый сотни тысяч раз) с 16-байтовой солью, согласно OWASP. В режиме, совместимом с OpenSSL, PBKDF2 по умолчанию использует всего 10 000 итераций (значение по умолчанию для openssl enc), а устаревший KDF EVP_BytesToKey, используемый CryptoJS и старым OpenSSL, выполняет всего один проход MD5 — на порядки слабее. Больше итераций означает более медленный перебор на каждую попытку, поэтому современное значение по умолчанию настолько выше. Argon2 и scrypt ещё сильнее, но не входят в Web Crypto, поэтому здесь не рассматриваются; для хранения паролей следуйте рекомендациям OWASP и отдавайте предпочтение Argon2id.
Лучшие практики шифрования AES
- Предпочитайте GCM, если другая сторона не требует иного
- Аутентифицированное шифрование обнаруживает подмену, которую CBC и CTR молча пропускают. Переходите на CBC или CTR только ради совместимости, и в этом случае добавляйте MAC.
- Используйте новый случайный IV для каждого сообщения
- Инструмент делает это автоматически. Если вы задаёте IV вручную, никогда не используйте один и тот же IV с одним ключом повторно — для GCM повтор катастрофичен, а для CBC он ломает семантическую безопасность.
- Выбирайте надёжные парольные фразы и настоящие случайные ключи
- PBKDF2 замедляет перебор, но не может спасти слабую парольную фразу. Сгенерируйте длинную парольную фразу с помощью генератора паролей или настоящий случайный ключ с помощью генератора секретных ключей.
- Храните соль, IV и тег вместе с шифротекстом
- Они не секретны, но без них расшифровка не удастся. Самодостаточный формат этого инструмента объединяет все три; если вы используете режим необработанного ключа с «голым» шифротекстом, скопируйте IV отдельно и храните его вместе с шифротекстом.
- Не шифруйте боевые или регулируемые секреты ни в одном онлайн-инструменте
- Даже будучи полностью клиентским, инструмент в браузере предназначен для обучения, отладки и разовых личных задач. Настоящим секретам место в проверенной системе управления ключами с аудированной обработкой и ротацией ключей. Сам AES-256 надёжен — он одобрен в наборе NSA CNSA 2.0 для информации вплоть до уровня TOP SECRET — а реальные взломы происходят из-за ошибок реализации, а не из-за шифра.
FAQ по шифрованию AES
Безопасно ли шифровать текст онлайн?
Можно ли расшифровать AES без ключа?
GCM или CBC — какой режим использовать?
AES-128 или AES-256 — стоит ли использовать 256?
Загружаются ли мои данные при шифровании здесь?
В чём разница между парольной фразой и ключом?
Можно ли зашифровать так, чтобы OpenSSL или CryptoJS могли расшифровать?
Похожие инструменты
Все инструменты →Инструмент расшифровки AES — совместим с OpenSSL и CryptoJS
Безопасность
Расшифровывайте AES онлайн — GCM/CBC/CTR, парольная фраза или необработанный ключ, автоматическое определение формата OpenSSL и CryptoJS «U2FsdGVkX1». Работает на 100% в браузере, ключи никогда не покидают страницу.
Генератор и проверка bcrypt-хешей
Безопасность
Создавайте и проверяйте bcrypt-хеши паролей онлайн — настраиваемый фактор стоимости, префиксы $2b$/$2a$/$2y$. 100% в браузере; пароль никуда не отправляется.
HMAC генератор и проверка подписи
Безопасность
Бесплатный онлайн-генератор и верификатор HMAC. Вычисляйте HMAC-SHA256/SHA1/SHA384/SHA512 с ключами в Text, Hex или Base64 и выводом в Hex/Base64/Base64URL. Всё в браузере — ключи не покидают страницу.
Декодер JWT
Безопасность
Декодируйте JWT-токены онлайн бесплатно. Просмотр header, payload, signature, срока действия, алгоритма и claims. 100% в браузере — токен не покидает устройство. Без регистрации.
JWT-энкодер и генератор
Безопасность
Бесплатный онлайн-генератор и энкодер JWT. Соберите header и payload, подпишите с HS256, RS256 или ES256 мгновенно. 100% в браузере — ваш секрет и ключ не покидают устройство.
Бесплатный генератор JWT-секрета — HS256/384/512
Безопасность
Создайте надёжный JWT-секрет по RFC для HS256/384/512 — 100% в браузере, ничего не уходит на сервер. base64url, base64 или hex; копия для .env.