Szyfrowanie / deszyfrowanie AES

Szyfruj lub odszyfrowuj przy użyciu AES-128, AES-192 lub AES-256 (FIPS 197) w trybie GCM (szyfrowanie uwierzytelnione), CBC, CTR lub ECB. Klucze to surowe bajty w hex lub Base64, albo wyprowadzone z hasła przez PBKDF2-HMAC-SHA256. GCM obsługuje AAD i pokazuje znacznik uwierzytelniający osobno; wyniki CBC/CTR/ECB są zgodne z enc z OpenSSL. Skróty są w Generatorze skrótów, kody MAC z kluczem w Generatorze HMAC, a szyfry przestarzałe na stronie Legacy Ciphers w tej rodzinie.
Działa w całości lokalnie — klucze i tekst jawny nigdy nie opuszczają karty przeglądarki. Pliki do 200 MB.
Wszystko wpisane tutaj zostaje w tej karcie — ale to nie znaczy "bezpieczne dla sekretów produkcyjnych". Pamięć przeglądarki, rozszerzenia i podglądający przez ramię widzą to, co zostanie wklejone. Używaj tej strony do nauki, weryfikacji i testów interoperacyjności, a nie do obsługi danych klientów na żywo.
Kierunek: Tryb: Wynik:
GCM = AES-GCM z 12-bajtowym nonce i 128-bitowym znacznikiem uwierzytelniającym (AEAD: poufność + integralność). Domyślny, gdy celem jest bezpieczeństwo.
Hex toleruje spacje, dwukropki i prefiksy 0x.
Nigdy nie używaj ponownie nonce pod tym samym kluczem w GCM ani CTR.
Długość znacznika:
Wiersze parametrów zapisują dokładny odczyt klucza, IV, rozmiar AAD i znacznik, więc skopiowany wynik zawsze można odtworzyć na innym komputerze.
Który tryb wybrać?
GCM to domyślna odpowiedź: szyfruje i uwierzytelnia — wiersz znacznika ujawnia modyfikację (spróbuj odszyfrować z przerzuconym bajtem znacznika, a strona odmówi). CBC ukrywa wzorce bloków, ale nie zapewnia integralności; połącz go z HMAC (zobacz Generator HMAC), jeśli jego użycie jest konieczne. CTR zamienia AES w szyfr strumieniowy — bez dopełniania, ale ponowne użycie nonce pod tym samym kluczem jest katastrofalne zarówno w CTR, jak i w GCM. ECB jest tu tylko dla zgodności i dydaktyki: identyczne bloki tekstu jawnego szyfrują się do identycznych bloków szyfrogramu (słynny pingwin ECB).
Interoperacyjność z OpenSSL — wyniki CBC i CTR z tej strony (dopełnianie PKCS#7, surowy klucz) przechodzą w obie strony przez wiersz poleceń openssl enc:
openssl enc -aes-256-cbc -K <64-hex-klucz> -iv <32-hex-iv> -in msg.txt -out msg.enc
openssl enc -d -aes-256-cbc -K <klucz> -iv <iv> -in msg.enc -out msg.txt
To samo działa z -aes-128-cbc, -aes-192-cbc, -aes-256-ctr (IV 16-bajtowy = początkowy blok licznika). Uwaga: openssl enc nie obsługuje GCM — do szyfrowania uwierzytelnionego użyj tej strony albo openssl aesgcm z OpenSSL 3.3+.
Potrzebujesz zamiast tego chińskiego szyfru państwowego?
SM4 (GB/T 32907-2016) — szyfr blokowy wymagany w chińskiej kryptografii komercyjnej, o tym samym bloku 128-bitowym i rozmiarze klucza co AES, ale z własnym harmonogramem kluczy i S-boxem — działa na własnej stronie w trybie ECB i CBC: Szyfrowanie / deszyfrowanie SM4. Reszta pakietu SM także tam: SM3 (skrót), SM2 (klucz publiczny) i SM9 (kryptografia oparta na tożsamości).
Autotest
Uruchamia silniki strony wobec niezależnych wartości kontrolnych: wektorów znanych odpowiedzi dla wszystkich czterech trybów (wygenerowanych przez niezależną, natywną implementację), wektorów znacznika GCM z AAD i bez, sprawdzeń krzyżowych silnika WebCrypto z czysto-JS-owym silnikiem AES, cyklu GCM oraz testów negatywnych (zmieniony znacznik lub zły klucz muszą zawieść). Nic nie jest nigdzie wysyłane.
Szyfrowanie AES od podstaw
W jednym zdaniu: AES to światowy standard szyfru blokowego — miesza bloki 16-bajtowe kluczem 128, 192 lub 256-bitowym — a tryb pracy (GCM, CBC, CTR, ECB), decyduje o łączeniu bloków, roli IV i tym, czy można wykryć modyfikację; wybieraj GCM, chyba że istnieje powód, by tego nie robić.
Czym jest sam AES (FIPS 197)

Szyfr blokowy. AES (konstrukcja Rijndael, znormalizowana przez NIST w 2001 jako FIPS 197) szyfruje dokładnie 16 bajtów naraz. Długość klucza — 16, 24 lub 32 bajty — wybiera AES-128, -192 lub -256 oraz liczbę rund wewnętrznych (10, 12, 14). Każda runda miesza blok z kluczami rundowymi wyprowadzonymi z klucza, za pomocą tablic podstawień, przesunięć wierszy i mieszania kolumn. Żaden praktyczny atak nie łamie samego szyfru: rzeczywiste awarie to niemal zawsze błędy trybu, IV lub zarządzania kluczami — o tym jest reszta tej strony.

Po co w ogóle tryb? Bo wiadomości rzadko mają 16 bajtów. Tryb skleja szyfrowania bloków: ECB szyfruje bloki niezależnie; CBC wykonuje XOR każdego bloku z poprzednim szyfrogramem; CTR szyfruje licznik i wykonuje XOR z danymi jak szyfr strumieniowy; GCM opiera się na CTR i dodaje znacznik uwierzytelniający. AES pozostaje ten sam — tryb zmienia wszystko w zakresie gwarancji, jakie zapewnia.

Klucze i hasła. Klucz AES to 16, 24 lub 32 losowe bajty. Hasło ludzkie nim nie jest: opcja Hasło na tej stronie wyprowadza właściwy klucz przy użyciu PBKDF2-HMAC-SHA256 (domyślnie 600 000 iteracji, bazowy poziom OWASP 2023 — szczegóły KDF opisano w Generatorze HMAC). Nigdy nie używaj hasła tekstowego bezpośrednio jako klucza AES: jego entropia to niewielka część długości.

Porównanie czterech trybów
TrybIV / nonceIntegralnośćUwagi
GCM12 bajtów, unikalny dla każdej wiadomościTak — znacznik 96..128 bitówAEAD: zalecany domyślnie wszędzie (TLS 1.3, SSH, formaty plików). Akceptuje też AAD.
CBC16 bajtów, nieprzewidywalnyNieDopełnianie PKCS#7; klasyczny, ale wymaga obok MAC. Błędy typu padding-oracle to klasyczna pułapka CBC.
CTRpoczątkowy licznik 16-bajtowyNieBez dopełnienia, działa strumieniowo, dostęp swobodny; ponowne użycie nonce pod jednym kluczem ujawnia XOR tekstów jawnych.
ECBbrakNieIdentyczne bloki → identyczny szyfrogram. Słynna demonstracja pingwina ECB. Tylko dla zgodności.

Zasady IV w jednym akapicie. IV nie jest sekretem — wyślij go razem z szyfrogramem — ale wymagania co do jego unikalności różnią się: CBC chce nieprzewidywalnego IV; GCM i CTR wymagają jedynie, by nigdy nie używać ponownie tego samego nonce pod tym samym kluczem (ponowne użycie nonce w GCM jest gorsze: ujawnia klucz uwierzytelniania). Przycisk Losowy IV na tej stronie korzysta z bezpiecznego generatora przeglądarki; przycisk Same zera służy do odtwarzania wektorów testowych, a nie do prawdziwych wiadomości.

Dopełnianie. CBC i ECB wymagają pełnych bloków, więc dopełnienie PKCS#7 dodaje 1..16 bajtów, każdy równy długości dopełnienia. Dlatego szyfrogramy CBC rosną nawet o 16 bajtów i dlatego odszyfrowanie złym kluczem zwykle kończy się błędem dopełnienia. CTR i GCM działają jak strumieniowe i nie potrzebują dopełnienia — długość szyfrogramu dokładnie równa się długości tekstu jawnego (wypróbuj Przykład w trybie CTR: 43 bajty wejścia, 43 bajty wyjścia).

CFB i OFB (pozostałe dwa klasyczne tryby) nie są zaimplementowane na tej stronie: działają jak strumieniowe CTR, ale bez żadnej przewagi nad nim, i przetrwały głównie w starych protokołach.

Co dodaje GCM (AEAD, znaczniki, AAD)

Szyfrowanie uwierzytelnione. GCM = szyfrowanie CTR + uwierzytelnianie GHASH po szyfrogramie, IV i AAD. Znacznik wyjściowy jest odciskiem wszystkiego: zmiana jednego bitu szyfrogramu, IV lub AAD powoduje niezgodność znacznika, więc odbiorca może udowodnić, że wiadomość jest nienaruszona i pochodzi od posiadacza klucza. CBC+HMAC osiąga to samo tylko przy poprawnym złożeniu (encrypt-then-MAC) — GCM robi to poprawnie z założenia.

AAD. Dodatkowe dane uwierzytelnione są przesyłane jawnie, ale są objęte znacznikiem: nagłówki protokołu, nazwy plików, identyfikatory algorytmów. Odbiorca musi podać identyczne bajty AAD, inaczej kontrola znacznika się nie powiedzie — o to właśnie chodzi.

Długość znacznika. Domyślny 128-bitowy znacznik to zalecenie; krótsze znaczniki (96..120 bitów) wymieniają odporność na fałszerstwa na rozmiar. Poniżej 96 bitów dowody bezpieczeństwa GCM szybko się degradują, dlatego ta strona kończy się na tym progu.

Katastrofa nonce. Ponowne użycie 12-bajtowego nonce GCM pod tym samym kluczem ujawnia XOR tekstów jawnych obu wiadomości oraz podklucz uwierzytelniania — po czym fałszerstwa są możliwe dla wszystkich przyszłych wiadomości pod tym kluczem. Systemy, które nie mogą zagwarantować unikalności, używają wariantów odpornych na błędne użycie nonce (AES-GCM-SIV, RFC 8452).

Wartości kontrolne — odtwórz je na tej stronie

Pierwszy wiersz to znany jednoblokowy przykład FIPS 197; pozostałe wygenerowano niezależną, natywną implementacją (OpenSSL przez Node.js) i ponownie zweryfikowano w silnikach tej strony. Wklej klucz, IV i dane wejściowe na stronę, aby odtworzyć każdy wiersz.

PrzypadekDane wejścioweOczekiwany wynik
AES-128, pojedynczy blok (w stylu 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, to samo, ale z AAD deadbeefkey 000102..1fct eacab966ff15e518f48f5390be502fbc2756ccee0dcfff36a282c50bf5593ae7, tag aead900e895c88252d0388d7aefce5c8
AES-256-CBCkey 000102..1f, IV 101112..1f, plaintext 0011..ef ×20e2392dd6f690b44a5a1b4fdff3b7f83cb9ab59d9900119cc5f83e062d95fb643b1a94b514ea2f3b95f84c900b5c98a8
AES-256-CTR (te same dane wejściowe co CBC powyżej)43-byte plaintext → 43-byte ciphertexte9d2cdb9f661359178ed366dfa3a4671f8e20efd723f090eb7d1d524d480fd3c
Typowe błędy
  • Używanie ECB, bo nie wymaga IV. Wygoda jest pułapką: wzorce bloków przenikają wprost do szyfrogramu (zaszyfruj bitmapę, a obraz nadal będzie widoczny). ECB jest dopuszczalny tylko dla pojedynczych bloków lub losowych kluczy o długości dokładnie 16 bajtów — w praktyce nigdy z wyboru.
  • Ponowne użycie nonce/IV. Przy GCM lub CTR pod jednym kluczem to jedyny błąd, który psuje wszystko naraz. Systemy oparte na liczniku (przycisk Losowy IV na tej stronie) istnieją po to, by uniemożliwić ten błąd.
  • Traktowanie IV jako sekretu. Nie jest nim. Przechowuj go lub przesyłaj razem z szyfrogramem. Ukrywanie go nic nie daje i kusi do ponownego użycia.
  • Używanie hasła jako klucza. "hunter2hunter2hunter2hunter2" ma 32 bajty, ale nie 256 bitów entropii — to słowo ze słownika z dopełnieniem. Wyprowadź klucz przez PBKDF2 (wbudowane na tej stronie) albo wygeneruj losowy klucz.
  • Zakładanie, że CBC wykrywa modyfikacje. Przerzuć bit w szyfrogramie CBC, a odszyfrowanie "się uda" z po cichu uszkodzonym tekstem jawnym. Dopiero znacznik GCM (lub jawny HMAC) ujawnia modyfikację.
  • Porównywanie szyfrogramów GCM pod kątem równości. Przy losowych nonce ten sam tekst jawny szyfruje się za każdym razem inaczej — to zaleta. Szyfrowanie deterministyczne to inne, specjalistyczne narzędzie.
FAQ

Czy AES-128 jest nadal bezpieczny, czy potrzebuję 256? Oba są bezpieczne wobec realistycznych atakujących; znane ataki zmniejszają margines tylko w niewielkim stopniu. AES-256 ma znaczenie głównie dla sekretów długoterminowych i odporności postkwantowej (algorytm Grovera zmniejsza moc klucza o połowę, więc AES-256 daje ok. 128 bitów).

Dlaczego openssl enc nie obsługuje GCM? Polecenie enc powstało przed AEAD i nie ma sposobu na przenoszenie znacznika; OpenSSL 3.3 dodał zamiast tego osobne polecenie aesgcm. Wynik GCM na tej stronie umieszcza znacznik w osobnym wierszu, dzięki czemu można jawnie przenosić oba elementy.

Czym jest owijanie kluczy (AES-KW)? Specjalistyczny tryb do szyfrowania innych kluczy stałymi porcjami 64-bitowymi, z własną kontrolą integralności. Nie jest tu udostępniony, bo jego wejścia i wyjścia mają kształt kluczy, a nie wiadomości — błędne użycie to norma.

Dlaczego szyfrogram CTR ma taką samą długość jak tekst jawny, a CBC jest dłuższy? CTR i GCM działają jak szyfry strumieniowe (bez dopełniania); CBC/ECB dopełniają do pełnego bloku 16-bajtowego w PKCS#7. Różnica długości jest zamierzona, nie jest błędem.

Czy mogę odszyfrować coś zaszyfrowanego gdzie indziej? Tak, jeśli znany jest dokładny tryb, klucz, IV (a w przypadku GCM także znacznik). Wiersze wyniku na tej stronie zapisują wszystkie te wartości, dzięki czemu można przenosić parametry między narzędziami — pole OpenSSL powyżej pokazuje odpowiadające im polecenia.