Odszyfrowanie DES kończy się błędem „bad decrypt” lub błędem dopełnienia — co sprawdzić?
Odszyfrowywanie wymaga zgodności każdego parametru ze stroną szyfrującą: bajtów klucza, długości klucza (8/16/24), trybu (ECB/CBC), IV, dopełnienia oraz formatu szyfrogramu — hex czy Base64. Dwie najczęstsze pułapki: niezgodna długość klucza („klucz DES” z 32 znaków hex ma 16 bajtów — to 3DES 2-kluczowy, a nie pojedynczy DES) i mylenie nazw dopełnienia (Java PKCS5Padding to PKCS#7 dla DES — nie wybieraj None). Rozwijany panel po prawej pokazuje równoważne polecenie OpenSSL dla bieżących ustawień; wyślij je drugiej stronie — to najszybszy sposób na znalezienie rozbieżności.
Jaka jest długość klucza DES? A 3DES?
Pojedynczy DES: nominalnie 64 bity (8 bajtów, 56 efektywnych — jeden bit w każdym bajcie to bit parzystości). 3DES występuje w dwóch odmianach: 2-kluczowej (16 bajtów, K1‖K2 z K3=K1) i 3-kluczowej (24 bajty, K1‖K2‖K3). Nominalny materiał klucza to 112/168 bitów, ale efektywna siła bezpieczeństwa wg NIST (SP 800-57 Part 1 Rev.5, tabela 2) to zaledwie około 80 i 112 bitów — a wariant 3-kluczowy jest dodatkowo odradzany. To narzędzie rozpoznaje odmianę po liczbie bajtów; każda inna długość zgłasza błąd — CryptoJS i openssl enc -K po cichu obcinają lub dopełniają zerami, co jest przyczyną numer jeden problemów z interoperacyjnością.
Czym jest IV i jaką ma długość dla DES?
IV to 8-bajtowa wartość, którą CBC miesza z pierwszym blokiem; ECB go nie używa. Musi mieć dokładnie 8 bajtów (16 cyfr hex lub 8 znaków ASCII). Zwróć uwagę: IV dla DES ma 8 bajtów, a dla AES 16 — skopiowanie długości IV z AES kończy się natychmiastowym błędem. Nigdy nie używaj ponownie IV z tym samym kluczem.
Czemu odpowiada Java DES/ECB/PKCS5Padding w tym narzędziu?
Tryb ECB + dopełnienie PKCS#7. W JCE „PKCS5Padding” dla DES wykonuje ogólny algorytm PKCS#7 — PKCS#5 definiował kiedyś dopełnienie tylko dla 8-bajtowych bloków, którym akurat jest blok DES. Wynik Java Cipher.getInstance("DES/ECB/PKCS5Padding") odszyfruje się tutaj z ECB + PKCS#7 i 8-bajtowym kluczem pojedynczego DES. ⚠️ 3DES w Javie (DESede) akceptuje tylko klucze 24-bajtowe — dla odmiany 2-kluczowej musisz sam rozbudować K1‖K2 do K1‖K2‖K1.
Jak mapują się nazwy algorytmów des-ede3 w PHP?
PHP zapożycza nazwy OpenSSL: des-ede3-cbc to 3DES 3-kluczowy + CBC, des-ede3-ecb to 3 klucze + ECB; des-ede-cbc to odmiana 2-kluczowa. Klucz 24-bajtowy wybiera 3 klucze, 16 bajtów — 2 klucze.
Czym są bity parzystości w kluczu DES? Czy są sprawdzane?
Najmłodszy bit każdego bajtu klucza jest zdefiniowany jako bit parzystości, więc prawdziwy 56-bitowy klucz „siedzi” w środku 64 bitów. FIPS 46-3 nie wymaga jego sprawdzania — OpenSSL, Java i to narzędzie go ignorują; działają dowolne 8 bajtów, a zmiana bitów parzystości nie zmienia szyfrogramu. Wyjątkiem jest .NET: najpierw normalizuje parzystość, a potem porównuje z tabelą słabych kluczy, więc klucze zerowe i inne słabe są w .NET odrzucane, podczas gdy każda inna biblioteka szyfruje je bez zastanowienia — pułapka, która strzela tylko przy przenoszeniu kluczy testowych z Java/OpenSSL na .NET.
Co się dzieje w 3DES, gdy K1 = K2?
W 3DES 2-kluczowym K3 zawsze równa się K1; jeśli także K1 = K2, cały łańcuch EDE sprowadza się do pojedynczego DES: E_K(D_K(E_K(P))) = E_K(P). To samo dzieje się, gdy wszystkie trzy 8-bajtowe części klucza 24-bajtowego są identyczne. To narzędzie nadal szyfruje (interoperacyjność przede wszystkim), ale realna siła to wtedy 56 bitów pojedynczego DES, a nie 3DES.
Czy DES jest wciąż bezpieczny?
Nie — służy wyłącznie do interoperacyjności ze starymi systemami. NIST wycofał pojedynczy DES 19.05.2005 (klucz 56-bitowy poddaje się atakom brute-force; EFF Deep Crack zrobił to w 56 godzin w 1998 roku, a rok później w 22 godziny z distributed.net). SP 800-131A Rev.2 oznacza szyfrowanie TDEA 2-kluczowym jako niedozwolone, a szyfrowanie 3-kluczowe jako niedozwolone po 31.12.2023 (odszyfrowywanie pozostaje w statusie „Legacy use” — tylko do odczytu danych historycznych); sam SP 800-67 został wycofany 01.01.2024. Mały 64-bitowy blok niesie też granicę urodzinową klasy Sweet32 (CVE-2016-2183) — NIST ogranicza jeden zestaw kluczy do 2²⁰ bloków (≈8 MB) tekstu jawnego. Do wszystkiego nowego używaj AES-256. To narzędzie istnieje, bo izby rozliczeniowe, bramki płatnicze i stare systemy Java/.NET wciąż krążą komunikaty ery DES — a naprawianie zaczyna się od umiejętności ich odczytania.
Dlaczego mój wynik 3DES różni się od Java/PHP?
Sprawdzaj w kolejności częstotliwości: ① długość klucza — „klucz DES z 32 znaków hex” u drugiej strony to 16 bajtów (3DES 2-kluczowy), a Ty odszyfrowywałeś jako pojedynczy DES; ② tryb — nagie "DES" w Javie domyślnie ECB, nazwy OpenSSL bez przyrostka trybu, des-ede3/des-ede, to ECB (alias CBC to -des3); openssl_encrypt w PHP wymaga jawnej nazwy algorytmu — mylące jest to, że domyślnie zwraca tekst Base64, a nie surowe bajty; ③ dopełnienie — stary mcrypt w PHP często używał dopełnienia zerowego, JCE — PKCS#5/#7; ④ kodowanie — hex kontra Base64 i wielkość liter; ⑤ pułapka hasła w CryptoJS — podanie łańcucha jako „klucza” uruchamia wyprowadzanie klucza (MD5 + losowa sól, wynik z prefiksem Salted__, za każdym razem inny), co w ogóle nie jest surowym kluczem — główna przyczyna sytuacji „ten sam kod, za każdym razem inny wynik”. To narzędzie pozwala przełączać każdy parametr; równoważne polecenie OpenSSL po prawej można wysłać drugiej stronie, żeby to odtworzyć.
ECB czy CBC — którego użyć?
Takiego, jakiego wymaga system, z którym się komunikujesz — przy interoperacyjności ze starymi systemami nie ma się co spierać. Jeśli jednak masz wybór, zawsze CBC z losowym IV: ECB zamienia równe bloki tekstu jawnego w równe bloki szyfrogramu, a małe 8-bajtowe bloki DES wyciekają wzorcami jeszcze wyraźniej niż AES-ECB. Protokoły bankowe ery DES używają obu; najpierw sprawdź dokumentację protokołu.
Czy to działa offline? Czy moje dane są wysyłane?
Wszystkie obliczenia dzieją się w Twojej przeglądarce (czysty TypeScript, zero zależności, zero żądań sieciowych); klucze i tekst jawny nigdy nie opuszczają urządzenia. Po załadowaniu strony możesz przejść offline i pracować dalej. To jedyna akceptowalna postać narzędzia do obsługi kluczy.
3DES 2-kluczowy czy 3-kluczowy — który częściej występuje w starych systemach?
Częstszy jest 2-kluczowy (16 bajtów): banki i branża płatnicza wdrażały sprzęt z kluczami 16-bajtowymi dla kompatybilności, a SP 800-67 wyznaczył mu osobną (wcześniejszą) datę wycofania. Zatem „klucz 3DES” z 32 znaków hex to najpewniej odmiana 2-kluczowa. To narzędzie rozpoznaje odmianę po liczbie bajtów automatycznie.