Шифрування / розшифрування AES

Шифруйте або розшифровуйте за допомогою AES-128, AES-192 або AES-256 (FIPS 197) у режимах GCM (автентифіковане шифрування), CBC, CTR або ECB. Ключі — це сирі байти у hex або Base64 чи виведені з пароля через PBKDF2-HMAC-SHA256. GCM підтримує AAD і показує тег автентифікації окремо; виводи CBC/CTR/ECB сумісні з enc OpenSSL. Для гешів див. генератор гешів, для MAC з ключем — генератор HMAC, для застарілих шифрів — сторінку застарілих шифрів у цій родині.
Працює повністю локально — ключі й відкритий текст не покидають вашу вкладку. Файли до 200 МБ.
Усе, що ви вводите тут, залишається у цій вкладці — але це не те саме, що «безпечно для промислових секретів». Пам'ять браузера, розширення та сторонні очі бачать те, що ви вставляєте. Використовуйте цю сторінку, щоб вивчати, перевіряти та налагоджувати сумісність, а не для роботи з реальними даними клієнтів.
Напрямок: Режим: Вихід:
GCM = AES-GCM з 12-байтовим nonce і 128-бітним тегом автентифікації (AEAD: конфіденційність + цілісність). За замовчуванням, коли важлива безпека.
Hex допускає пробіли, двокрапки та префікси 0x.
Ніколи не повторюйте nonce з тим самим ключем у GCM або CTR.
Довжина тега:
Рядки параметрів фіксують точне прочитання ключа, IV, розмір AAD і тег, тож скопійований результат завжди можна відтворити на іншій машині.
Який режим обрати?
GCM — відповідь за замовчуванням: він шифрує і автентифікує — рядок тегу робить підміну видимою (спробуйте розшифрувати зі зміненим байтом тегу — сторінка відмовиться). CBC приховує шаблони блоків, але не забезпечує цілісності; поєднуйте його з HMAC (див. генератор HMAC), якщо він потрібен. CTR перетворює AES на потоковий шифр — без доповнення, але повторний nonce під тим самим ключем катастрофічний і для CTR, і для GCM. ECB тут лише для сумісності та навчання: однакові блоки відкритого тексту шифруються в однакові блоки шифротексту (відомий «пінгвін ECB»).
Сумісність з OpenSSL — виходи CBC і CTR з цієї сторінки (доповнення PKCS#7, сирий ключ) проходять туди й назад через командний рядок openssl enc:
openssl enc -aes-256-cbc -K <64-hex-ключ> -iv <32-hex-iv> -in msg.txt -out msg.enc
openssl enc -d -aes-256-cbc -K <ключ> -iv <iv> -in msg.enc -out msg.txt
Те саме працює з -aes-128-cbc, -aes-192-cbc, -aes-256-ctr (16-байтовий IV = початковий блок лічильника). Зверніть увагу: openssl enc не підтримує GCM — для автентифікованого шифрування використовуйте цю сторінку або openssl aesgcm з OpenSSL 3.3+.
Потрібен натомість китайський національний шифр?
SM4 (GB/T 32907-2016) — блоковий шифр, передбачений у китайській комерційній криптографії, з тим самим 128-бітним блоком і розміром ключа, що й AES, але з власним розкладом ключів і S-box — працює на окремій сторінці в режимах ECB і CBC: Шифрування / розшифрування SM4. Решта набору SM розміщена там само: SM3 (геш), SM2 (відкритий ключ) і SM9 (криптографія на основі ідентифікаторів).
Самоперевірка
Запускає рушії сторінки проти незалежних еталонів: тестові вектори з відомими відповідями для всіх чотирьох режимів (згенеровані незалежною нативною реалізацією), тестові вектори тегів GCM з AAD і без нього, перехресна перевірка рушія WebCrypto з чистою JS-реалізацією AES, цикл GCM і негативні тести (змінений тег і неправильний ключ мають провалюватися). Нічого нікуди не надсилається.
Шифрування AES з нуля
Коротко: AES — світовий стандартний блоковий шифр: він перемішує 16-байтові блоки за ключем 128, 192 або 256 біт, а режим, у якому ви його запускаєте (GCM, CBC, CTR, ECB), визначає, як блоки з'єднуються, для чого потрібен IV і чи можна виявити підміну; оберіть GCM, якщо немає причин цього не робити.
Що таке сам AES (FIPS 197)

Блоковий шифр. AES (конструкція Rijndael, стандартизована NIST у 2001 році як FIPS 197) шифрує рівно 16 байтів за раз. Довжина ключа — 16, 24 або 32 байти — визначає AES-128, -192 або -256 та кількість внутрішніх раундів (10, 12, 14). Кожен раунд змішує блок із раундовими ключами, похідними від вашого ключа, через таблиці підстановки, зсуви рядків і змішування стовпців. Жодна практична атака не ламає сам шифр: справжні збої майже завжди пов'язані з помилками режиму, IV або управління ключами — про це й решта цієї сторінки.

Навіщо взагалі режим? Тому що повідомлення рідко буває рівно 16 байтів. Режим з'єднує шифрування блоків: ECB просто шифрує блоки незалежно; CBC складає (XOR) кожен блок із попереднім шифротекстом; CTR шифрує лічильник і складає його з даними, як потоковий шифр; GCM побудовано на CTR і додає тег автентифікації. AES залишається тим самим — режим змінює все, що стосується гарантій.

Ключі та паролі. Ключ AES — це 16, 24 або 32 випадкові байти. Людський пароль таким не є: опція «Пароль» на цій сторінці виводить належний ключ за допомогою PBKDF2-HMAC-SHA256 (за замовчуванням 600 000 ітерацій, базовий рівень OWASP 2023 — деталі KDF див. у генераторі HMAC). Ніколи не використовуйте рядок пароля безпосередньо як ключ AES: його ентропія становить невелику частку довжини.

Порівняння чотирьох режимів
РежимIV / nonceЦілісністьПримітки
GCM12 байтів, унікальний для кожного повідомленняТак — тег 96..128 бітAEAD: рекомендований вибір усюди (TLS 1.3, SSH, формати файлів). Також приймає AAD.
CBC16 байтів, непередбачуванийНіДоповнення PKCS#7; класичний, але потребує MAC поруч. Помилки оракула доповнення — класична пастка CBC.
CTR16-байтовий початковий лічильникНіБез доповнення, потоковий, довільний доступ; повторне використання nonce під одним ключем розкриває XOR відкритих текстів.
ECBнемаєНіОднакові блоки → однаковий шифротекст. Демонстрація «пінгвін ECB». Лише для сумісності.

Правила IV в одному абзаці. IV не є секретом — надсилайте його поруч із шифротекстом — але правила його унікальності відрізняються: CBC потребує непередбачуваного IV; GCM і CTR лише вимагають ніколи не повторювати той самий nonce з тим самим ключем (повторне використання nonce у GCM гірше: воно розкриває ключ автентифікації). Кнопка «Випадковий IV» використовує безпечний генератор випадкових чисел браузера; кнопка «Усі нулі» існує для відтворення тестових векторів, а не для реальних повідомлень.

Доповнення. CBC та ECB потребують цілих блоків, тому PKCS#7 додає від 1 до 16 байтів, кожен зі значенням довжини доповнення. Тому шифротексти CBC зростають до 16 байтів, і розшифрування неправильним ключем зазвичай завершується помилкою доповнення. CTR і GCM працюють як потокові й доповнення не потребують — довжина шифротексту точно дорівнює довжині відкритого тексту (спробуйте приклад у режимі CTR: 43 байти на вході, 43 на виході).

CFB і OFB (два інші класичні режими) на цій сторінці не реалізовано: вони працюють як потокові, як CTR, але без переваг над ним, і здебільшого збереглися в старих протоколах.

Що додає GCM (AEAD, теги, AAD)

Автентифіковане шифрування. GCM = шифрування CTR + автентифікатор GHASH над шифротекстом, IV та AAD. Вихідний тег є відбитком усього: зміна одного біта шифротексту, IV або AAD робить тег невідповідним, тож одержувач може довести, що повідомлення цілісне і походить від власника ключа. CBC+HMAC досягає того самого, лише якщо його правильно скласти (encrypt-then-MAC) — GCM робить це правильно за конструкцією.

AAD. Додаткові автентифіковані дані передаються відкрито, але покриваються тегом: заголовки протоколу, імена файлів, ідентифікатори алгоритмів. Одержувач мусить надати ті самі байти AAD, інакше перевірка тегу не пройде — саме в цьому й суть.

Довжина тега. Стандартний 128-бітний тег — рекомендований; коротші теги (96..120 біт) обмінюють стійкість до підробки на розмір. Нижче 96 біт гарантії безпеки GCM швидко погіршуються, тому на цій сторінці нижчі значення не пропонуються.

Катастрофа nonce. Повторне використання 12-байтового nonce GCM під тим самим ключем розкриває XOR відкритих текстів двох повідомлень та підключ автентифікації — після цього можливі підробки для всіх майбутніх повідомлень під цим ключем. Системи, які не можуть гарантувати унікальність, використовують варіанти, стійкі до зловживання nonce (AES-GCM-SIV, RFC 8452).

Опорні значення — відтворіть їх на цій сторінці

Перший рядок — відомий однобльоковий приклад із FIPS 197; решту згенеровано незалежною нативною реалізацією (OpenSSL через Node.js) і повторно перевірено на рушіях цієї сторінки. Вставте ключ, IV і вхідні дані на сторінку, щоб відтворити кожен рядок.

ВаріантВхідні даніОчікуваний результат
Один блок AES-128 (у стилі FIPS 197)key 000102..0f, plaintext 00112233..ff69c4e0d86a7b0430d8cdb78070b4c55a
AES-128-GCMkey 000102..0f, IV 606162..6b, plaintext 0011..ef ×2ct 275f095bedfda377063fee326128892188377b410698ed03a022b9971bb4bdbe, tag 87ea7770714048977de2fd8dac645ecf
AES-256-GCM, те саме, але з AAD deadbeefkey 000102..1fct eacab966ff15e518f48f5390be502fbc2756ccee0dcfff36a282c50bf5593ae7, tag aead900e895c88252d0388d7aefce5c8
AES-256-CBCkey 000102..1f, IV 101112..1f, plaintext 0011..ef ×20e2392dd6f690b44a5a1b4fdff3b7f83cb9ab59d9900119cc5f83e062d95fb643b1a94b514ea2f3b95f84c900b5c98a8
AES-256-CTR (той самий вхід, що й CBC вище)43-byte plaintext → 43-byte ciphertexte9d2cdb9f661359178ed366dfa3a4671f8e20efd723f090eb7d1d524d480fd3c
Типові помилки
  • Використання ECB через те, що не потрібен IV. Зручність — пастка: шаблони блоків просочуються прямо в шифротекст (зашифруйте растрове зображення, і картинку все ще видно). ECB прийнятний лише для окремих блоків або випадкових ключів рівно по 16 байтів — на практиці його не обирають свідомо.
  • Повторне використання nonce/IV. За GCM або CTR під одним ключем це єдина помилка, яка ламає все одразу. Системи з лічильником (кнопка «Випадковий IV» на цій сторінці) існують, щоб зробити її неможливою.
  • Вважати IV секретом. Це не так. Зберігайте або передавайте його разом із шифротекстом. Приховування нічого не дає і спокушає до повторного використання.
  • Використання пароля як ключа. "hunter2hunter2hunter2hunter2" має 32 байти, але не 256 біт ентропії — це слово зі словника з доповненням. Виведіть ключ через PBKDF2 (вбудовано на цій сторінці) або згенеруйте випадковий ключ.
  • Припущення, що CBC виявляє підміну. Переверніть один біт у шифротексті CBC, і розшифрування «пройде» з тихо пошкодженим відкритим текстом. Лише тег GCM (або явний HMAC) робить підміну видимою.
  • Порівняння шифротекстів GCM на рівність. З випадковими nonce той самий відкритий текст щоразу шифрується по-різному — це особливість. Детерміноване шифрування — інший, спеціалізований інструмент.
Часті запитання (FAQ)

AES-128 досі безпечний чи потрібен 256? Обидва варіанти захищені від реалістичних зловмисників; найкращі відомі атаки зменшують запас лише на частку. AES-256 важливий насамперед для довгострокових секретів і постквантового запасу (алгоритм Гровера зменшує стійкість ключа вдвічі, тож AES-256 має еквівалент близько 128 біт).

Чому openssl enc не підтримує GCM? Команда enc з'явилася раніше за AEAD і не має способу передати тег; OpenSSL 3.3 додав для цього окрему команду aesgcm. Вихід GCM на цій сторінці виводить тег окремим рядком, щоб ви могли явно переставляти обидва значення.

Що таке обгортання ключів (AES-KW)? Спеціалізований режим для шифрування інших ключів фіксованими 64-бітними блоками з власною перевіркою цілісності. Тут його не пропонуємо, бо вхідні та вихідні дані мають форму ключів, а не повідомлень — помилки тут звична річ.

Чому шифротекст CTR має ту саму довжину, що й відкритий текст, а CBC — довший? CTR і GCM працюють як потокові (без доповнення); CBC/ECB доповнюють до цілого 16-байтового блоку за PKCS#7. Різниця в довжині — свідомий дизайн, а не помилка.

Чи можна розшифрувати щось, зашифроване деінде? Так, якщо ви знаєте точний режим, ключ, IV (а для GCM — ще й тег). Рядки виводу цієї сторінки фіксують усе це точно, тож ви можете переносити параметри між інструментами — наведений вище блок OpenSSL показує відповідні рядки команд.