Skip to content

Инструмент шифрования AES — GCM, CBC и CTR

Бесплатное онлайн-шифрование AES — AES-128/192/256, GCM/CBC/CTR, парольная фраза (PBKDF2) или необработанный ключ. Работает на 100% в браузере, ничего не загружается на сервер.

Без отслеживания Работает в браузере Бесплатно
Всё выполняется в вашем браузере — ваш ключ и данные никогда не покидают эту страницу.
Рекомендуется
Размер ключа
Тип ключа
Дополнительные параметры
Шифротекст
Нужна отдельная страница расшифровки?
Проверено на криптографическую точность в соответствии с FIPS 197, NIST SP 800-38D, OWASP и спецификацией W3C Web Crypto — Go-Tools Security Team · Jul 16, 2026

Что такое шифрование 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. 1

    Выберите режим и размер ключа

    Оставьте режим на GCM (рекомендуется) и размер ключа на 256 — это самый надёжный разумный вариант по умолчанию. Переключайтесь на CBC или CTR только если этого требует система, с которой вы работаете.

  2. 2

    Выберите парольную фразу или необработанный ключ

    Оставьте тип ключа на «Парольная фраза» и введите надёжную парольную фразу, либо переключитесь на «Необработанный ключ» и вставьте точный ключ длиной 128/192/256 бит в hex или Base64. Значок с числом байт подтвердит, что длина вашего необработанного ключа корректна.

  3. 3

    Введите текст для шифрования

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

  4. 4

    Скопируйте самодостаточный шифротекст

    Результат в Base64 справа уже содержит соль, IV и тег аутентификации. Используйте полосу сегментов, чтобы увидеть раскладку байт, затем нажмите «Копировать». Переключите кодировку вывода на Hex, если этого ожидает целевая система.

  5. 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 без ключа?
Нет. У AES нет известного практического взлома, поэтому без ключа или парольной фразы нет короткого пути — атакующему остаётся только перебирать ключи один за другим. У AES-256 существует 2^256 возможных ключей; даже при триллионе триллионов попыток в секунду потребовалось бы намного больше времени, чем возраст вселенной, чтобы перебрать сколько-нибудь значимую долю. Реальные риски никогда не связаны с самим шифром: это слабая парольная фраза, повторно использованный IV, утёкший ключ или оракул дополнения (padding oracle) в плохо спроектированной системе. Выберите надёжную парольную фразу — и ни один из этих рисков вам не грозит. Любой, кто рекламирует «восстановление AES» без ключа, продаёт мошенничество.
GCM или CBC — какой режим использовать?
Используйте GCM. Он даёт конфиденциальность плюс встроенный 128-битный тег аутентификации, поэтому если хотя бы один байт шифротекста изменён, расшифровка завершится ошибкой, а не молча вернёт повреждённые данные. CBC только скрывает данные; сам по себе он не может обнаружить подмену и имеет долгую историю уязвимостей типа «оракул дополнения» (Vaudenay, EUROCRYPT 2002), из-за чего TLS 1.3 (RFC 8446) убрал все наборы шифров на основе CBC. Единственная веская причина выбрать здесь CBC — совместимость с существующей системой, например с командой enc из OpenSSL, которая не поддерживает GCM.
AES-128 или AES-256 — стоит ли использовать 256?
Оба варианта считаются безопасными; AES-128 не взломан и работает чуть быстрее. У AES-256 более длинный ключ и больший запас прочности, и именно этот размер одобрен в наборе NSA CNSA 2.0 для информации вплоть до уровня TOP SECRET, поэтому он и является разумным выбором по умолчанию. Цена этого минимальна — несколько дополнительных раундов на блок. Если вы не оптимизируете крайне нагруженный участок кода, шифруйте с помощью AES-256 — дополнительный запас безопасности на практике достаётся практически бесплатно.
Загружаются ли мои данные при шифровании здесь?
Нет. Всё шифрование выполняется локально через Web Crypto API браузера (crypto.subtle) — ту же проверенную аудитом реализацию, которую браузер использует для HTTPS. Ничто из введённого вами никуда не отправляется — вы можете открыть панель «Сеть» в инструментах разработчика, что-нибудь зашифровать и увидеть ноль запросов, либо полностью отключиться от интернета — инструмент всё равно будет работать. SubtleCrypto доступен только в защищённых (HTTPS) контекстах, и это отчасти то, почему эта гарантия соблюдается.
В чём разница между парольной фразой и ключом?
Ключ — это ровно 128, 192 или 256 бит случайных данных: для AES-256 это 32 сырых байта, обычно записываемых в hex или Base64. Парольная фраза — это набранный человеком текст произвольной длины, и сам по себе он не является ключом: его нужно растянуть в ключ с помощью функции формирования ключа (KDF). Этот инструмент делает это автоматически в режиме парольной фразы с помощью PBKDF2-HMAC-SHA256, 600 000 итераций и случайной соли. Перепутать одно с другим — вставить парольную фразу в поле необработанного ключа или наоборот — одна из самых частых причин, по которым две системы не сходятся в шифротексте. (Для подписанных токенов, а не шифрования, см. кодировщик JWT.)
Можно ли зашифровать так, чтобы OpenSSL или CryptoJS могли расшифровать?
Да. Включите режим, совместимый с OpenSSL (с AES-CBC и парольной фразой), и инструмент выдаст формат Salted__, который понимают команда openssl enc и CryptoJS, а также покажет точную эквивалентную команду openssl. Выберите подходящую функцию формирования ключа: PBKDF2 для современного OpenSSL (значение по умолчанию для openssl -pbkdf2 — 10 000 итераций), EVP-SHA256 для OpenSSL 1.1+ без -pbkdf2 или EVP-MD5 для CryptoJS и OpenSSL 1.0.2 и более ранних версий. Чтобы пойти в обратную сторону и прочитать чужой шифротекст, используйте инструмент расшифровки AES.

Похожие инструменты

Все инструменты →

Инструмент расшифровки 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.