Skip to content

Инструмент расшифровки AES — совместим с OpenSSL и CryptoJS

Расшифровывайте AES онлайн — GCM/CBC/CTR, парольная фраза или необработанный ключ, автоматическое определение формата OpenSSL и CryptoJS «U2FsdGVkX1». Работает на 100% в браузере, ключи никогда не покидают страницу.

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

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

    Вставьте шифротекст

    Поместите ваш шифротекст в Base64 или Hex в поле ввода. Если он начинается с U2FsdGVkX1, инструмент помечает его как формат OpenSSL/CryptoJS и предлагает переключиться в нужный режим.

  2. 2

    Задайте формат и режим

    Для самодостаточной строки из этого инструмента оставьте режим «Парольная фраза» и подходящий GCM/CBC/CTR. Для вывода OpenSSL/CryptoJS примите переключение (CBC + парольная фраза). Для данных с необработанным ключом выберите «Необработанный ключ» и кодировку, а также укажите IV, если он не добавлен впереди.

  3. 3

    Выберите функцию формирования ключа

    В режиме OpenSSL выберите PBKDF2 (и число его итераций), EVP-SHA256 или EVP-MD5 в соответствии с тем, как был выведен ключ. EVP-MD5 — это тот, который использует CryptoJS.

  4. 4

    Введите парольную фразу или ключ

    Введите точную парольную фразу или вставьте точный необработанный ключ в hex или Base64. Открытый текст появится справа, как только всё совпадёт.

  5. 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 без ключа?
Нет — и остерегайтесь тех, кто утверждает обратное. У AES нет известной практической слабости, поэтому без ключа или парольной фразы остаётся только полный перебор, а цифры делают это безнадёжным: у AES-256 есть 2^256 возможных ключей — пространство настолько огромное, что даже астрономически быстрый перебор занял бы намного больше времени, чем возраст вселенной, чтобы хоть сколько-нибудь его сократить. Для AES не существует восстановления по принципу «забыл пароль», и не существует легитимного сервиса, который расшифрует произвольный шифротекст AES за вас. Если вы потеряли ключ, данные утрачены; если ключ есть, этот инструмент расшифрует их прямо в браузере. Когда расшифровка не удаётся, несмотря на наличие ключа, виновник почти всегда — неверный режим, IV или функция формирования ключа, а не сломанный шифр.
Как расшифровать вывод openssl enc?
Вставьте шифротекст в Base64 (он начинается с U2FsdGVkX1) и примите предложение инструмента переключиться в режим OpenSSL, либо включите режим, совместимый с OpenSSL, вручную: режим CBC и тип ключа «Парольная фраза». Введите парольную фразу, затем выберите функцию формирования ключа, использованную в openssl: PBKDF2, если файл создан с -pbkdf2 (задайте то же число итераций — по умолчанию 10 000), либо EVP-SHA256 для обычного файла OpenSSL 1.1+ без -pbkdf2. Инструмент показывает точную команду openssl enc -d, которую он отражает. Например, echo 'U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 10000 -pass pass:correct-horse -base64 -A выводит Attack at dawn!.
Что означает U2FsdGVkX1 в начале шифротекста?
Это отпечаток формата OpenSSL Salted__. OpenSSL и CryptoJS добавляют перед шифротекстом 8 ASCII-байт Salted__, за которыми следует 8-байтовая соль, и когда всё это кодируется в Base64, начальные байты всегда выглядят как U2FsdGVkX1. Увидев это, вы узнаёте две вещи: данные были получены командой openssl enc или вызовом CryptoJS AES.encrypt(text, passphrase), а ключ был выведен из парольной фразы — значит, вам понадобится парольная фраза плюс правильная функция формирования ключа, а не необработанный ключ. Вставьте его сюда, и инструмент автоматически определит формат и предложит переключиться в подходящий режим.
Как расшифровать шифротекст CryptoJS?
AES.encrypt(text, passphrase) из CryptoJS использует формат OpenSSL Salted__, но с ключом, выведенным устаревшей функцией EVP_BytesToKey с использованием MD5 и всего одной итерации. Поэтому вставьте шифротекст, переключитесь в режим OpenSSL и выберите функцию формирования ключа EVP-MD5 — эту настройку упускают почти все, и именно поэтому шифротекст CryptoJS выглядит «нерасшифровываемым» при попытке использовать PBKDF2 или SHA-256. Введите ту же парольную фразу, и появится ваш открытый текст. В командной строке эквивалентная расшифровка требует -md md5.
GCM или CBC — почему мой шифротекст расшифровывается одним способом, а не другим?
Режим должен совпадать с тем, каким образом были зашифрованы данные; они не взаимозаменяемы. GCM включает 128-битный тег аутентификации и откажется расшифровывать (ошибка аутентификации), если выбран неверный режим, ключ или IV. У CBC нет тега, поэтому неверный выбор может молча выдать бессмысленные данные или ошибку дополнения вместо явного отказа. Если аутентификация GCM постоянно не проходит, убедитесь, что данные действительно в GCM; если CBC выдаёт ошибки дополнения, перепроверьте парольную фразу и функцию формирования ключа. Панель диагностики этого инструмента указывает на наиболее вероятную причину вместо общей ошибки.
Загружаются ли мой шифротекст или ключ при расшифровке здесь?
Нет. Расшифровка полностью выполняется в вашем браузере через Web Crypto API (crypto.subtle) — тот же проверенный аудитом движок, который браузер использует для HTTPS. Ваш шифротекст, парольная фраза и ключ никуда не отправляются; вы можете наблюдать, что вкладка «Сеть» остаётся пустой, или отключиться от интернета и расшифровывать офлайн. Именно этот исключительно локальный подход делает разумным вставлять сюда чувствительный шифротекст, хотя всё же стоит избегать обработки боевых секретов в любом онлайн-инструменте.
В чём разница между парольной фразой и необработанным ключом при расшифровке?
Это определяет, как вы вводите секрет. Если данные были зашифрованы с помощью парольной фразы (включая всё, что в формате U2FsdGVkX1), выберите «Парольная фраза» и позвольте инструменту вывести ключ с подходящим KDF и солью. Если они были зашифрованы точным ключом длиной 128/192/256 бит, выберите «Необработанный ключ» и вставьте эти байты в hex или Base64 — также может понадобиться указать IV, либо добавленный перед шифротекстом, либо введённый отдельно. Попытка расшифровать данные с парольной фразой как необработанный ключ, или наоборот, — частая причина неудачи расшифровки. Чтобы создать шифротекст в любом из этих видов, используйте инструмент шифрования AES.

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

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

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