CalcMint

Szyfrowanie i deszyfrowanie AES

Zaszyfruj wiadomość hasłem i odszyfruj ją później albo pracuj na surowych kluczach i IV, by przetestować własny kod. Szyfrowanie odbywa się na twoim urządzeniu przez Web Crypto API.

Szyfrowanie i deszyfrowanie AES

UdostępnijXFacebookReddit
Dodaj ten kalkulator na swoją stronę

Skopiuj kod i wklej go do HTML-a swojej strony. To nic nie kosztuje – prosimy tylko o pozostawienie linku do źródła.

Co robi tryb hasła

Hasło jest zamieniane na 256-bitowy klucz za pomocą PBKDF2-HMAC-SHA256 z 600 000 iteracji (zalecenie OWASP) i losową 16-bajtową solą. Tekst jest szyfrowany AES-256-GCM z losowym 12-bajtowym nonce, a wynik to sól + nonce + szyfrogram + 16-bajtowy tag, zapisane w Base64. Dwukrotne zaszyfrowanie tego samego tekstu daje różne wyniki i tak ma być.

Odszyfrowanie gdzie indziej zajmuje kilka linijek kodu, np. w Pythonie z pakietem cryptography:

import base64
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC

data = base64.b64decode(ciphertext)
salt, nonce, body = data[:16], data[16:28], data[28:]
key = PBKDF2HMAC(hashes.SHA256(), 32, salt, 600_000).derive(password.encode())
print(AESGCM(key).decrypt(nonce, body, None).decode())

AES w skrócie

AES (FIPS 197) to szyfr blokowy ustandaryzowany przez NIST w 2001 roku. Szyfruje 16-bajtowe bloki kluczem 128-, 192- lub 256-bitowym, a tryb decyduje o tym, jak bloki są łączone: CBC wymaga dopełnienia (paddingu) i losowego IV, CTR zamienia AES w szyfr strumieniowy, a GCM dodaje tag uwierzytelniający, który wykrywa każdą zmianę szyfrogramu. Utrata hasła lub klucza oznacza utratę danych: nie da się ich odzyskać.

Najczęstsze pytania

Którą opcję wybrać?

Do własnych wiadomości używaj domyślnego trybu hasła (AES-256-GCM): jest uwierzytelniony, więc wykrywa błędne hasło lub zmieniony tekst. Formatu OpenSSL/CryptoJS używaj do wymiany danych z kodem korzystającym z CryptoJS.AES lub openssl enc, a opcji „Surowy klucz i IV”, by dopasować się do konkretnej implementacji.

Czy można tu odszyfrować tekst zaczynający się od U2FsdGVkX1?

Tak, jeśli znasz hasło. U2FsdGVkX1 to „Salted__” w Base64, nagłówek zapisywany przez CryptoJS i OpenSSL. Automatycznie sprawdzane są zarówno starsze wyprowadzanie klucza z MD5, jak i nowsze z SHA-256.

Dlaczego nie ma trybu ECB?

Przeglądarki go nie oferują, bo jest niebezpieczny: identyczne bloki tekstu jawnego dają identyczne bloki szyfrogramu, co ujawnia powtarzające się wzorce. Używaj CBC, CTR albo, najlepiej, GCM.

Czy to, co wklejam, trafia na serwer?

Nie. To narzędzie działa w całości w twojej przeglądarce, z użyciem JavaScriptu i wbudowanego Web Crypto API. Nic, co wpiszesz, wkleisz lub otworzysz, nie jest wysyłane ani zapisywane.

Podobne kalkulatory