Шифратор/Дешифратор AES
Профессиональное AES шифрование с 6 режимами и 5 вариантами заполнения
Настройки Шифрования
Что такое AES Шифрование?
AES (Advanced Encryption Standard) — наиболее широко используемый алгоритм симметричного шифрования в мире, одобренный NSA для защиты информации уровня TOP SECRET. AES был разработан на основе шифра Rijndael бельгийскими криптографами Joan Daemen и Vincent Rijmen и официально опубликован NIST в 2001 году как замена устаревшего DES. AES использует блочное шифрование с фиксированным размером блока 128 бит (16 байт) и поддерживает три длины ключа: 128, 192 и 256 бит. Более длинные ключи обеспечивают более высокую безопасность, но несколько меньшую скорость. Как симметричный алгоритм, AES использует один и тот же ключ для шифрования и дешифрования. AES имеет широкое применение: TLS/SSL для веба и электронной почты, BitLocker/FileVault для шифрования дисков, шифрование баз данных и безопасность IoT. Этот инструмент поддерживает все 6 режимов AES (ECB, CBC, CFB, OFB, CTR, GCM) и 5 схем заполнения.
Как использовать
Как использовать
- Выберите режим шифрования (GCM рекомендуется для шифрования с проверкой целостности)
- Выберите схему дополнения (режимы GCM/CFB/OFB/CTR автоматически работают без дополнения)
- Выберите длину ключа (256 бит для максимальной безопасности, 128 бит для лучшей производительности)
- Введите ключ или нажмите «Сгенерировать случайный ключ», чтобы создать его автоматически
- Для режимов, требующих IV, введите или сгенерируйте вектор инициализации
- Введите открытый текст (для шифрования) или шифротекст (для расшифровки) в левой панели
- Результаты появятся автоматически в правой панели
- Нажмите «Копировать», чтобы скопировать результат, или «Поменять местами», чтобы обменять вход и выход
Режимы шифрования
- GCM — Режим Галуа/счётчика (GCM), рекомендуется. Обеспечивает шифрование и аутентификацию, не требует дополнения, поддерживает параллельную обработку, идеален для передачи данных по сети и TLS
- CBC — Сцепление блоков шифротекста (CBC), классический режим. Каждый блок открытого текста XOR-ится с предыдущим блоком шифротекста перед шифрованием, требует дополнения и IV, хорошая безопасность, но параллелизм не поддерживается
- CFB — Режим обратной связи по шифротексту (CFB), поточный режим. Преобразует блочный шифр в поточный, не требует дополнения, подходит для потоковых данных, поддерживает шифрование в реальном времени
- OFB — Режим обратной связи по выходу (OFB), похож на CFB, но ошибки не распространяются, подходит для зашумлённых каналов, дополнение не требуется
- CTR — Режим счётчика (CTR). Для генерации ключевого потока использует инкрементируемый счётчик, не требует дополнения, поддерживает полностью параллельное шифрование, высокая производительность
- ECB — Электронная кодовая книга (ECB), НЕ рекомендуется. Одинаковый открытый текст даёт одинаковый шифротекст, раскрывает шаблоны данных, подходит только для шифрования единичных блоков
Схемы дополнения
- PKCS7 — Дополнение PKCS#7, самое распространённое и рекомендуемое. Добавляет N байтов со значением N, точно снимается при расшифровке, однозначно идентифицируется
- ZeroPadding — Дополнение нулями. Заполняет байтами 0x00, простое, но может вызвать неоднозначность, если данные естественно заканчиваются нулевыми байтами
- NoPadding — Без дополнения. Требует, чтобы длина данных была кратна 16 байтам, подходит для поточных режимов или данных с известной длиной
- ISO7859 — Дополнение ISO/IEC 7816-4. Первый байт дополнения — 0x80, далее следуют байты 0x00, широко применяется в смарт-картах и финансовой отрасли
- ANSIX923 — Дополнение ANSI X.923. Все байты дополнения — 0x00, последний байт указывает длину дополнения, часто используется при обмене финансовыми данными
Полезные советы
- Генерируйте ключи с помощью криптографически стойких случайных чисел, избегайте легко угадываемых строк
- Используйте новый случайный IV для каждого шифрования, никогда не используйте IV повторно
- Для режима GCM рекомендуется IV длиной 12 байт (96 бит) — оптимальный баланс производительности и безопасности
- Режимы CTR и GCM поддерживают параллельную обработку и ускоряют шифрование больших объёмов данных
- Ключи и IV можно вводить в шестнадцатеричном, текстовом или Base64 формате
- Длины hex-ключей: 128 бит = 32 символа, 192 бит = 48 символов, 256 бит = 64 символа
Применение
Технический принцип
AES (Advanced Encryption Standard) был опубликован NIST как FIPS 197 в ноябре 2001 года после пятилетнего открытого конкурса, начавшегося в 1997 году с 15 кандидатами. Победителем стал Rijndael, разработанный бельгийскими криптографами Joan Daemen и Vincent Rijmen, обошедший финалистов Twofish, Serpent, RC6 и Mars. AES заменил DES (FIPS 46, выведен из обращения в 2005 году) и на сегодня является самым широко развёрнутым симметричным блочным шифром: он используется в TLS 1.2/1.3, IPsec, BitLocker, FileVault, настройке OpenSSL по умолчанию `aes-256-gcm`, модуле ядра Linux dm-crypt, Apple CryptoKit и Android Keystore. В 2003 году NSA одобрил AES-256 для защиты информации уровня TOP SECRET (набор A), что сделало AES первым публично доступным шифром, допущенным к высшему уровню секретности в США. Размер блока фиксирован на 128 бит (16 байт); длина ключа составляет 128, 192 или 256 бит, что соответствует 10, 12 или 14 раундам. Каждый раунд (кроме последнего) выполняет четыре операции над состоянием 4x4 байт: SubBytes применяет фиксированную S-Box 16x16 (0x63 = 01100011 находится в строке 6, столбце 3 — S-Box построена как мультипликативный обратный элемент в GF(2^8) плюс аффинное преобразование для разрушения алгебраической структуры); ShiftRows сдвигает строку 0 на 0, строку 1 на 1, строку 2 на 2, строку 3 на 3 байта; MixColumns умножает каждый столбец на фиксированную циркулянтную MDS-матрицу над GF(2^8) (полином 0x03 * x в матричной форме); AddRoundKey выполняет XOR с раундовым подключом. Последний раунд пропускает MixColumns. Раундовые ключи получаются из расписания ключей Rijndael: 11/13/15 раундовых ключей по 128 бит каждый, генерируемых с помощью RotWord (циклический сдвиг влево на 1 байт), SubWord (применение S-Box) и XOR с Rcon[i] = [0x01, 0x02, 0x04, ..., 0x80, 0x1b, 0x36] *2^(i-1) над GF(2^8). Библиотека `aes-js` на странице выполняет все четыре шага на чистом JavaScript и побайтово совместима с libcrypto из OpenSSL. Представлены пять режимов блочного шифрования. ECB шифрует каждый 16-байтный блок независимо: одинаковые блоки открытого текста дают одинаковые блоки шифротекста, раскрывая структуру (знаменитое изображение «пингвина ECB» сохраняет силуэт после шифрования, поскольку пиксельный шаблон сохраняется). CBC выполняет XOR каждого блока открытого текста с предыдущим блоком шифротекста перед шифрованием; первый блок XOR-ится с вектором инициализации. CTR превращает AES в поточный шифр, шифруя инкрементируемый счётчик (nonce || counter, обе половины по 64 бита от 128-битного блока) и выполняя XOR ключевого потока с открытым текстом — поддерживает произвольный доступ и параллельное шифрование. GCM — это CTR плюс GHASH (универсальный хеш-аутентификатор над GF(2^128)), формирующий 16-байтный тег аутентификации, добавляемый после шифротекста. GCM является AEAD по умолчанию в TLS 1.3 (RFC 8446) и в большинстве современных API (Node `crypto.createCipheriv('aes-256-gcm', ...)`). CFB и OFB — устаревшие поточные режимы, сохранённые для совместимости. Ловушка с IV — самая частая ошибка в продакшне. GCM с 96-битным (12-байтным) IV — рекомендуемая конфигурация NIST (RFC 5288, NIST SP 800-38D §5.2.1.1): 12-байтный IV рассматривается как счётчик, а GHASH вычисляется над J0 = IV || 0x00000001. Повторное использование IV с тем же ключом в режиме CTR раскрывает XOR открытых текстов (C1 XOR C2 = P1 XOR P2 — одна атака с выбранным открытым текстом восстанавливает оба сообщения). Повторное использование IV в GCM ещё хуже: атакующий может восстановить подключ аутентификации H и подделать теги для произвольных сообщений (атака описана в Joux 2006 и является причиной, по которой NIST запретил случайные 96-битные IV без строгой уникальности). Страница генерирует 12-байтные IV с помощью `crypto.getRandomValues(new Uint8Array(12))` для GCM и 16-байтные IV для CBC/CFB/OFB, а кнопка генерации случайного ключа использует тот же CSPRNG, поэтому каждое шифрование начинается со свежего материала. Этот инструмент выполняет шифрование и расшифровку AES целиком в браузере через aes-js (чистая JavaScript-реализация AES). Резервный путь через Web Crypto / SubtleCrypto отсутствует — независимо от размера данных все операции идут через aes-js.
- AES — это FIPS 197 (2001), отобранный на открытом конкурсе NIST с 15 кандидатами; Rijndael обошёл Twofish, Serpent, RC6 и Mars. Размер блока всегда 128 бит; ключи 128/192/256 бит выполняют 10/12/14 раундов. Страница поддерживает все три варианта через конструкторы aes-js: AES_128, AES_192 и AES_256.
- Четырёхшаговая раундовая функция: SubBytes (256-байтная S-Box — обратный элемент в GF(2^8) плюс аффинное преобразование), ShiftRows (строки сдвигаются на 0/1/2/3 байта), MixColumns (умножение на MDS-матрицу над GF(2^8) с полиномом 0x03), AddRoundKey (XOR с раундовым ключом). Последний раунд пропускает MixColumns. Один алгоритм, один ключ = один шифротекст — AES детерминирован.
- ECB небезопасен, так как одинаковые блоки открытого текста дают одинаковые блоки шифротекста (знаменитое изображение «пингвина ECB» сохраняет силуэт). CBC — безопасная классика; CTR добавляет параллелизм; GCM добавляет аутентификацию и является режимом по умолчанию в TLS 1.3 (RFC 8446). CFB и OFB — поточные режимы, сохранённые для обратной совместимости.
- Дополнение PKCS#7: не хватает 1 байта → 15 байтов 0x0f + 1 байт 0x10; не хватает 2 байтов → 14 байтов 0x0e + 2 байта 0x0f и т. д. Значение последнего байта — длина дополнения, поэтому снятие дополнения однозначно. Поточные режимы (CTR/CFB/OFB/GCM) полностью пропускают дополнение. ZeroPadding неоднозначно, если данные заканчиваются байтом 0x00 — не используйте его.
- GCM — это AEAD: шифротекст плюс 16-байтный тег аутентификации, вычисляемый через GHASH над GF(2^128) с использованием H = AES_K(0^128). AAD (дополнительные аутентифицированные данные) покрывают заголовки без их шифрования. 96-битный IV (RFC 5288) рассматривается как счётчик; 128-битные IV проходят через GHASH для получения J0 — та же безопасность, чуть медленнее.
- Повторное использование IV катастрофично. Повтор IV в режиме CTR раскрывает P1 XOR P2 (двукратное использование одноразового блокнота). Повтор IV в GCM (Joux 2006) позволяет атакующему восстановить H и подделать теги. Страница генерирует IV с помощью `crypto.getRandomValues` (CPRNG), никогда не повторяет их в рамках сессии и прикрепляет IV перед шифротекстом, чтобы принимающая сторона могла его извлечь без внесистемного состояния.
- Генерация ключа AES: кнопка случайного ключа использует `crypto.getRandomValues` (CSPRNG браузера). Раунды AES вычисляются через aes-js — чистую JavaScript-реализацию, побайтно совместимую с libcrypto OpenSSL при одинаковых ключе, IV и схеме дополнения.
- Реальность побочных каналов: AES на чистом JS не является константно-временным (индексация в массив S-Box утеает тайминг). AES в Web Crypto работает в нативном коде и является константно-временным. Для высоконагруженных задач (HSM, серверные KDF) предпочтительнее нативный путь; для обучающего инструмента в браузере aes-js подходит, поскольку входные данные уже находятся в памяти страницы. Путь миграции: SHA-1 → SHA-256 для хешей, DES → AES для шифров, ECB → GCM для режимов.
Примеры
Шифрование AES-128-CBC
Открытый текст: Hello, World!
Ключ: 0123456789abcdef0123456789abcdef (32 hex = 128 бит)
IV: fedcba9876543210fedcba9876543210 (32 hex = 128 бит)
Режим: CBC / PKCS#7 / 128 бит
Страница выводит шифртекст (Base64 и Hex) в панели результата.
Нажмите 'Копировать', чтобы получить значение, или 'Поменять',
чтобы расшифровать обратно. Дополнение PKCS#7 добавляет 3 байта
(0x03 0x03 0x03), чтобы дополненный открытый текст заполнил один
блок AES.
FIPS: FIPS 197 определяет AES; NIST SP 800-38A определяет режим CBCАутентифицированное шифрование AES-256-GCM
Открытый текст: sensitive data payload
Ключ: 6f8a3b2c1d9e7f5a4b8c0d2e1f3a5b7c9d1e3f5a7b9c1d3e5f7a9b1c3d5e7f9a (64 hex = 256 бит)
IV: 1a2b3c4d5e6f708192a3b4c5 (24 hex = 12 байт, рекомендуемая длина для GCM)
Режим: GCM / без дополнения / 256 бит / AAD пустой
Формат вывода: IV (12B) || Шифртекст || AuthTag (16B)
FIPS: NIST SP 800-38D определяет режим GCM; 96-битный IV используется как счётчикAES-128-ECB (тестовый вектор FIPS 197 Приложение B)
Ключ: 2b7e151628aed2a6abf7158809cf4f3c (128 бит)
Открытый текст: 3243f6a8885a308d313198a2e0370734
Шифртекст (Hex): 3925841d02dc09fbdc118597196a0b32
Режим: ECB / 128 бит
Примечание: ECB шифрует каждый 16-байтовый блок независимо.
Одинаковые блоки открытого текста всегда дают одинаковые блоки
шифртекста.
FIPS: FIPS 197 Приложение B содержит этот канонический тестовый векторСравнение безопасности режимов AES
ECB: без IV, детерминированный, выявляет шаблоны - НИКОГДА не используйте в продакшене
CBC: случайный IV, расшифрование параллельное, требуется HMAC для целостности
CTR: IV-счётчик, параллельное шифрование/расшифрование, требуется MAC
GCM: случайный IV, параллелизуемый, встроенный тег аутентификации
Для новых систем предпочтительнее AES-256-GCM:
- 256-битный ключ устойчив к квантовым атакам (алгоритм Гровера)
- GCM обеспечивает конфиденциальность и целостность за одну операцию
- TLS 1.3 требует AEAD-шифров, таких как AES-GCM
NIST: NIST SP 800-38A/D документируют все эти режимыЧасто задаваемые вопросы
Что такое AES и какие размеры ключей поддерживаются?
AES (Advanced Encryption Standard, FIPS 197) — симметричный шифр, на котором держится большая часть современного HTTPS, Wi-Fi WPA2 и шифрования дисков. Страница поддерживает ключи длиной 128, 192 и 256 бит. AES-128 быстр и безопасен почти для любых задач; AES-256 стоит выбирать только тогда, когда нужна долгосрочная устойчивость к будущему квантовому криптоанализу.
Какой режим выбрать — ECB, CBC, CFB, OFB, CTR или GCM?
ECB небезопасен для всего, кроме одноблочных тестовых векторов (он раскрывает паттерны данных). CBC и CTR обеспечивают только конфиденциальность и требуют отдельного MAC. GCM — современный выбор по умолчанию: он одновременно шифрует и аутентифицирует данные, и именно его использует HTTPS. Берите GCM, если только не нужна совместимость с устаревшей системой.
Какое дополнение (padding) использовать?
PKCS#7 (он же PKCS#5) — стандартное дополнение для режимов ECB и CBC. CTR, CFB, OFB и GCM работают как потоковые режимы и не требуют дополнения — там страница принудительно ставит «NoPadding». Если расшифровка падает с ошибкой «bad padding», чаще всего причина в несовпадении ключа, IV или настроек дополнения между двумя сторонами.
Почему один и тот же текст каждый раз шифруется в разный шифротекст?
Все режимы, кроме ECB, используют IV (вектор инициализации), который должен быть случайным для каждого шифрования. Один и тот же открытый текст плюс один и тот же ключ плюс разный IV — разный шифротекст. IV не является секретом — его обычно дописывают к шифротексту, — но повторное использование IV с тем же ключом в режиме CTR или GCM катастрофично и ломает шифрование.
Устойчив ли AES к квантовым атакам?
Эффективная стойкость AES-128 на достаточно мощном квантовом компьютере падает примерно до 64 бит из-за алгоритма Гровера; у AES-256 она снижается до 128 бит. Поэтому AES-256 — консервативный выбор для данных, которые должны оставаться секретными десятилетиями. Симметричный AES страдает от квантовых атак гораздо меньше, чем RSA или ECC.
Происходит ли шифрование прямо в моём браузере?
Да. Страница использует библиотеку aes-js (чистая JavaScript-реализация AES), которая работает локально в браузере. Открытый текст, ключи и IV никогда не покидают устройство. Это легко проверить во вкладке Network в инструментах разработчика.
Как безопасно передать ключ?
Никогда не вставляйте боевой рабочий ключ ни на эту, ни на любую другую веб-страницу. Считайте этот инструмент учебным пособием и способом проверить тестовые векторы. Для реального обмена ключами используйте асимметричную схему (RSA-OAEP, ECDH/X25519), ключ, выводимый из пароля через PBKDF2 или Argon2 с солью, либо управляемую KMS — но не «отправь ключ в чате».