Инструмент расшифровки AES — совместим с OpenSSL и CryptoJS
Расшифровывайте AES онлайн — GCM/CBC/CTR, парольная фраза или необработанный ключ, автоматическое определение формата OpenSSL и CryptoJS «U2FsdGVkX1». Работает на 100% в браузере, ключи никогда не покидают страницу.
Дополнительные параметры
Никогда не используйте один IV повторно с одним и тем же ключом. Оставьте поле пустым, чтобы сгенерировать безопасный случайный IV.
Как работает расшифровка AES
Расшифровка AES — это точная обратная операция шифрованию: тот же симметричный ключ, который перемешал данные, прогоняет раунды шифра в обратном порядке, чтобы восстановить исходные байты. Поскольку AES симметричен, отдельного «ключа расшифровки» не существует — нужно предоставить тот же самый ключ или парольную фразу, режим и IV, что использовались при шифровании. Если параметры верны, открытый текст возвращается байт в байт; если хотя бы один неверен, вы получите ошибку или бессмысленные данные.
Для корректной расшифровки четыре параметра должны точно совпадать с параметрами шифрования: ключ (или парольная фраза плюс настройки формирования ключа), режим работы (GCM, CBC или CTR), IV или nonce, а для GCM — ещё и тег аутентификации. Если хотя бы один из них не совпадает, результатом будет либо явная ошибка (ошибка аутентификации GCM, ошибка дополнения CBC), либо молчаливые бессмысленные данные (CTR или CBC с неверным IV). Этот инструмент сам считывает соль, IV и тег из шифротекста, когда они упакованы внутри, и диагностирует ошибку, когда что-то не сходится.
Шифротекст приходит в нескольких разных формах, и этот инструмент понимает три из них. Формат 1 — наша самодостаточная раскладка с парольной фразой: 16-байтовая соль, затем IV, затем шифротекст (с добавленным тегом GCM в режиме GCM) — расшифровывается только с помощью парольной фразы. Формат 2 — раскладка с необработанным ключом: IV, добавленный перед шифротекстом, либо «голый» шифротекст, для которого IV указывается отдельно. Формат 3 — раскладка OpenSSL, создаваемая командой openssl enc и CryptoJS.
Этот формат OpenSSL стоит уметь узнавать с первого взгляда. Он начинается с 8 ASCII-байт Salted__, за которыми следуют 8-байтовая соль и затем шифротекст, и когда всё это кодируется в Base64, первые байты всегда отображаются как префикс U2FsdGVkX1. Поэтому если полученный вами шифротекст начинается с U2FsdGVkX1, он почти наверняка создан командой openssl enc или вызовом CryptoJS AES.encrypt(text, passphrase). CryptoJS выводит ключ устаревшей функцией EVP_BytesToKey с одним проходом MD5, тогда как современный openssl использует PBKDF2 — именно поэтому выбор правильной функции формирования ключа и есть вся суть расшифровки таких данных. Если ваш ввод в Base64 и вы просто хотите увидеть сырые байты, наш декодер Base64 покажет их. Чтобы создать шифротекст в этих форматах, используйте инструмент шифрования AES.
// AES-256-GCM decrypt 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 aesGcmDecrypt(base64, passphrase) {
const enc = new TextEncoder();
const packed = Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));
const salt = packed.slice(0, 16), iv = packed.slice(16, 28); // salt(16) | iv(12)
const ct = packed.slice(28); // ciphertext + tag
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, ['decrypt']);
const plain = await crypto.subtle.decrypt(
{ name: 'AES-GCM', iv }, key, ct); // throws if the tag fails
return new TextDecoder().decode(plain); // recovered plaintext
} Ключевые возможности
Автоматически определяет вывод OpenSSL и CryptoJS
Вставьте шифротекст, начинающийся с U2FsdGVkX1, и инструмент распознает формат Salted__ и предложит переключиться в один клик на подходящий режим расшифровки, так что вам никогда не придётся бороться с тупиковой ошибкой.
Три функции формирования ключа
Расшифровывайте данные любого поколения формата openssl enc: PBKDF2 с произвольным числом итераций, EVP_BytesToKey с SHA-256 или устаревший однопроходный MD5, который использует CryptoJS.
Объясняет, почему расшифровка не удалась
Вместо общей ошибки вы получаете диагностику: неверный ключ или неверный IV, ошибка аутентификации GCM, ошибка дополнения CBC, засорение base64 или «это похоже на шифротекст эпохи MD5, попробуйте EVP-MD5».
Эквивалентная команда openssl показывается в реальном времени
Смотрите точную команду openssl enc -d, воспроизводящую расшифровку в командной строке, вместе с числом итераций, чтобы проверить результат вне браузера.
Парольная фраза или необработанный ключ, GCM/CBC/CTR
Обрабатывает самодостаточный шифротекст с парольной фразой, шифротекст с необработанным ключом с добавленным впереди или отдельно указанным IV, а также все три режима Web Crypto.
100% в вашем браузере
Шифротекст и ключи обрабатываются локально с помощью Web Crypto API и никогда не загружаются — вы можете убедиться в этом через вкладку «Сеть» или отключившись от интернета.
Примеры расшифровки AES
Расшифровка самодостаточного шифротекста с парольной фразой (GCM)
соль(16) ‖ IV(12) ‖ шифротекст ‖ тег(16), Base64 — со страницы шифрования
Быстрая бурая лиса перепрыгивает через ленивого пса.
Это обратная операция примеру GCM со страницы шифрования. Возьмите самодостаточную строку Base64, полученную там для парольной фразы hunter2, вставьте её сюда с режимом GCM, размером ключа 256, типом ключа «Парольная фраза» и той же парольной фразой hunter2 — и исходное предложение вернётся. Соль или IV отдельно вводить не нужно — инструмент считывает 16-байтовую соль и 12-байтовый IV из начала строки, выводит ключ с помощью PBKDF2-HMAC-SHA256 (600 000 итераций) и проверяет добавленный 128-битный тег GCM, прежде чем вернуть текст. Нажмите «Загрузить пример» на странице шифрования, чтобы сгенерировать новую строку, а затем расшифруйте её здесь.
Расшифровка реального вывода OpenSSL / PBKDF2
U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=
Attack at dawn!
Это настоящий вывод openssl enc. Вставьте его, переключитесь в режим OpenSSL (режим CBC, тип ключа «Парольная фраза»), введите парольную фразу correct-horse, выберите функцию формирования ключа PBKDF2 и установите число итераций 10 000 — открытый текст: Attack at dawn!. Префикс U2FsdGVkX1 сообщил инструменту, что это формат Salted__, а 8-байтовая соль расположена сразу после этого заголовка внутри Base64. Вы можете воспроизвести точную расшифровку в командной строке: echo 'U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 10000 -pass pass:correct-horse -base64 -A. Если похожий шифротекст не расшифровывается с PBKDF2, вероятно, он был создан CryptoJS — переключите KDF на EVP-MD5 и попробуйте снова. Нажмите «Загрузить пример OpenSSL», чтобы заполнить эти значения автоматически.
Как расшифровать шифротекст AES
- 1
Вставьте шифротекст
Поместите ваш шифротекст в Base64 или Hex в поле ввода. Если он начинается с U2FsdGVkX1, инструмент помечает его как формат OpenSSL/CryptoJS и предлагает переключиться в нужный режим.
- 2
Задайте формат и режим
Для самодостаточной строки из этого инструмента оставьте режим «Парольная фраза» и подходящий GCM/CBC/CTR. Для вывода OpenSSL/CryptoJS примите переключение (CBC + парольная фраза). Для данных с необработанным ключом выберите «Необработанный ключ» и кодировку, а также укажите IV, если он не добавлен впереди.
- 3
Выберите функцию формирования ключа
В режиме OpenSSL выберите PBKDF2 (и число его итераций), EVP-SHA256 или EVP-MD5 в соответствии с тем, как был выведен ключ. EVP-MD5 — это тот, который использует CryptoJS.
- 4
Введите парольную фразу или ключ
Введите точную парольную фразу или вставьте точный необработанный ключ в hex или Base64. Открытый текст появится справа, как только всё совпадёт.
- 5
Прочитайте диагностику при неудаче
Если расшифровка завершается ошибкой, панель называет вероятную причину — неверный IV, неверный ключ, ошибку дополнения, засорение base64 или несовпадение KDF, — чтобы вы могли менять по одной настройке за раз вместо угадывания.
Почему расшифровка AES не удаётся — и как это исправить
Ошибка аутентификации GCM
GCM отказывается возвращать открытый текст, если тег не проходит проверку. Причина — неверная парольная фраза или ключ, неверный режим, неверный IV либо изменённый/обрезанный шифротекст — GCM не может сказать, что именно. Перепроверьте каждый параметр в соответствии с тем, как данные были зашифрованы.
mode: CBC // but the data was encrypted with GCM => Authentication failed
mode: GCM, same passphrase and key size as encryption => plaintext
CBC: испорченный первый блок означает неверный IV
В CBC IV влияет только на первый 16-байтовый блок. Если первый блок бессмысленный, а остальное декодируется чисто, значит, неверен ваш IV; если бессмысленно всё, неверен ключ.
iv: 00000000000000000000000000000000 (wrong IV) => first block corrupt, rest readable
iv: (the exact IV used to encrypt) => Attack at dawn!
Ошибка дополнения CBC / PKCS#7
Ошибка дополнения почти всегда означает, что неверен ключ; также она может означать, что шифротекст был повреждён, обрезан или не был дополнен по PKCS#7. Убедитесь, что скопирован весь шифротекст целиком и что парольная фраза и KDF совпадают.
passphrase: hunter3 // one character off => padding error
passphrase: hunter2 // exact => plaintext
Засорение Base64 (или hex)
Переносы строк, пробелы или фигурные кавычки, вставленные вместе с шифротекстом, ломают декодирование. Инструмент автоматически удаляет пробельные символы, но пропущенные или лишние символы всё равно приводят к ошибке.
“U2FsdGVkX1...” (curly quotes and trailing junk copied in)
U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ= (clean Base64)
Обнаружен U2FsdGVkX1, но режим OpenSSL выключен
Если ввод начинается с U2FsdGVkX1, перед вами вывод OpenSSL/CryptoJS в формате Salted__, который не расшифруется как обычная строка с парольной фразой. Инструмент показывает баннер; нажмите «Переключиться в режим OpenSSL» и выберите KDF.
OpenSSL compatible: off input: U2FsdGVkX1... => cannot parse
OpenSSL compatible: on, KDF chosen => plaintext
Несовпадение KDF (ловушка CryptoJS)
Шифротекст, который не расшифровывается с PBKDF2 или SHA-256, но расшифровывается с EVP-MD5, был создан CryptoJS или openssl 1.0.2 и более ранними версиями. В командной строке для них нужен -md md5.
KDF: PBKDF2 // CryptoJS ciphertext => padding error
KDF: EVP-MD5 // matches CryptoJS => plaintext
Что можно делать с расшифровкой AES
- Расшифровка вывода openssl enc
- Прочитайте блок Salted__, созданный openssl enc -aes-256-cbc, без обращения к терминалу: вставьте Base64, введите парольную фразу, выберите KDF и получите открытый текст.
- Расшифровка шифротекста CryptoJS
- Восстановите данные из устаревшего приложения, использовавшего CryptoJS AES.encrypt(text, passphrase). Выберите EVP-MD5, чтобы соответствовать его однопроходному формированию ключа на MD5 — шаг, который упускают большинство людей.
- Отладка постоянно неудачной расшифровки
- Когда ваш собственный код не может что-то расшифровать, вставьте это сюда, чтобы с помощью панели диагностики выяснить, в чём проблема — в ключе, IV, режиме, кодировке или KDF.
- Проверка цикла шифрования
- Убедитесь, что шифротекст со страницы шифрования AES или из вашего приложения расшифровывается обратно в точности в исходные байты.
- Разобраться в неизвестном шифротексте
- Определите формат по его виду — префикс U2FsdGVkX1 или префикс фиксированной длины, похожий на IV, — и выясните, как он был получен, прежде чем пробовать ключ.
Внутреннее устройство и форматы расшифровки AES
- Расшифровка GCM — аутентифицированная
- GCM заново вычисляет 128-битный тег по шифротексту и сравнивает его перед тем, как вернуть открытый текст; при несовпадении происходит ошибка вместо утечки повреждённых данных. Используется 96-битный IV, добавленный впереди. Ошибка GCM означает, что неверен ключ, режим, IV или шифротекст — шифр не может сказать, что именно, только то, что аутентификация не прошла.
- Расшифровка CBC — следите за первым блоком и дополнением
- У CBC есть два различимых признака ошибки. Если испорчен только первый 16-байтовый блок, а остальное выглядит корректно, значит, неверен IV. Если бессмысленны все блоки, неверен ключ. Ошибка дополнения PKCS#7 обычно означает, что неверен ключ, либо шифротекст был повреждён или обрезан. У CBC нет тега (в отличие от аутентифицированной конструкции вроде HMAC), поэтому неверный ключ может даже расшифроваться в правдоподобно выглядящие байты.
- Расшифровка CTR — молчаливая при ошибке
- CTR никогда не выдаёт ошибку: неверный ключ просто даёт бессмысленные данные, что обычно проявляется как ошибка «недопустимый UTF-8» при попытке декодировать байты в текст. Точно сопоставляйте счётчик/IV. Поскольку проверки целостности нет, относитесь с подозрением к любому выводу CTR, который вы не аутентифицировали отдельно.
- Раскладки шифротекста (F1 / F2 / F3)
- Формат 1 (парольная фраза) — это соль(16), затем IV, затем шифротекст, с добавленным 16-байтовым тегом GCM в режиме GCM. Формат 2 (необработанный ключ) — это IV, затем шифротекст, либо «голый» шифротекст с отдельно указанным IV. Формат 3 (OpenSSL) — это ASCII-заголовок Salted__, затем 8-байтовая соль, затем шифротекст. Знание того, какая у вас раскладка, подсказывает инструменту, где находятся соль и IV, а сам необработанный ключ должен поступать из CSPRNG — см. генератор секретных ключей.
- Формирование ключа: соответствие тому, чем данные были зашифрованы
- Для самодостаточного шифротекста с парольной фразой этот инструмент использует PBKDF2-HMAC-SHA256 при 600 000 итераций. Для шифротекста OpenSSL/CryptoJS нужно выбрать использованный KDF: PBKDF2 (значение по умолчанию для openssl -pbkdf2 — 10 000 итераций — задайте точное число), EVP_BytesToKey с SHA-256 (openssl 1.1+ без -pbkdf2), либо EVP_BytesToKey с MD5 и одним проходом (CryptoJS и openssl 1.0.2 и более ранние версии). Классическая ошибка «не расшифровывается» — это шифротекст CryptoJS или старого openssl, испробованный с SHA-256, — переключитесь на EVP-MD5, и всё сработает.
Лучшие практики расшифровки AES
- Начните с определения формата
- Прежде чем менять настройки, посмотрите на шифротекст. Префикс U2FsdGVkX1 означает OpenSSL/CryptoJS; самодостаточная строка из этого инструмента — формат парольной фразы; «голый» блок обычно требует необработанного ключа и отдельного IV.
- Точно подберите функцию формирования ключа
- Для шифротекста OpenSSL/CryptoJS KDF так же важен, как и парольная фраза. Если PBKDF2 не срабатывает, попробуйте EVP-MD5 (CryptoJS, старый openssl); число итераций тоже должно совпадать, а не только алгоритм.
- Вставляйте шифротекст без искажений
- Случайные переносы строк или пробелы при копировании могут повредить Base64. Этот инструмент удаляет пробельные символы, но если декодирование всё равно не удаётся, проверьте фигурные кавычки, пропущенные символы или обрезанную копию. Наш инструмент Base64 поможет проверить подозрительную строку.
- Честно оценивайте результат с неверным ключом
- С CTR или CBC неверный ключ может выдать байты вместо ошибки. Если результат выглядит бессмысленным или не проходит проверку UTF-8, значит, неверен ключ или IV — не доверяйте частично правдоподобному результату.
- Никогда не отправляйте секретный шифротекст или ключи на сервер
- Смысл расшифровки в браузере в том, что ничего не покидает страницу. Избегайте инструментов, которые что-то загружают; этот использует Web Crypto локально, и вы можете убедиться в этом через вкладку «Сеть» или отключившись от интернета. AES-256 надёжен — одобрен CNSA 2.0 для уровня TOP SECRET, — поэтому если расшифровка не удаётся, проблема в параметрах, а не в шифре.
FAQ по расшифровке AES
Можно ли расшифровать AES без ключа?
Как расшифровать вывод openssl enc?
Что означает U2FsdGVkX1 в начале шифротекста?
Как расшифровать шифротекст CryptoJS?
GCM или CBC — почему мой шифротекст расшифровывается одним способом, а не другим?
Загружаются ли мой шифротекст или ключ при расшифровке здесь?
В чём разница между парольной фразой и необработанным ключом при расшифровке?
Похожие инструменты
Все инструменты →Инструмент шифрования AES — GCM, CBC и CTR
Безопасность
Бесплатное онлайн-шифрование AES — AES-128/192/256, GCM/CBC/CTR, парольная фраза (PBKDF2) или необработанный ключ. Работает на 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.