DES-ontsleuteling mislukt met "bad decrypt" of een paddingfout — wat controleer ik?
Ontsleutelen vereist dat elke parameter overeenkomt met de versleutelende kant: de sleutelbytes, de sleutellengte (8/16/24), de modus (ECB/CBC), de IV, de padding en of de cijfertekst hex of Base64 is. De twee meest voorkomende valkuilen: onjuiste sleutellengte (een "DES-sleutel" van 32 hex-tekens is 16 bytes — dat is 2-key 3DES, niet enkele DES) en verwarring over de paddingnaam (Java's PKCS5Padding IS PKCS#7 voor DES — kies geen None). Het inklapbare paneel rechts toont een gelijkwaardig OpenSSL-commando voor de huidige instellingen; dat naar de andere kant sturen is de snelste manier om het verschil te vinden.
Hoe lang is een DES-sleutel? En 3DES?
Enkele DES: nominaal 64 bits (8 bytes, 56 effectief — één bit per byte is een pariteitsbit). 3DES bestaat in twee vormen: 2-key (16 bytes, K1‖K2 met K3=K1) en 3-key (24 bytes, K1‖K2‖K3). Het nominale sleutelmateriaal is 112/168 bits, maar de effectieve veiligheidssterkte volgens NIST (SP 800-57 Part 1 Rev.5, tabel 2) is slechts circa 80 en 112 bits — en de 3-key-vorm is bovendien afgeraden. Deze tool herkent de vorm aan het aantal bytes; alles wat geen 8/16/24 is, geeft een fout — CryptoJS en openssl enc -K kappen of vullen met nullen in plaats daarvan, en dat is de nummer één oorzaak van interop-fouten.
Wat is de IV en hoe lang is die bij DES?
De IV is de waarde van 8 bytes die CBC in het eerste blok mengt; ECB gebruikt er geen. Hij moet exact 8 bytes zijn (16 hex-cijfers of 8 ASCII-tekens). Let op: de IV van DES is 8 bytes terwijl die van AES 16 is — de AES-IV-lengte overnemen faalt onmiddellijk. Hergebruik een IV nooit met dezelfde sleutel.
Waar komt Java's DES/ECB/PKCS5Padding in deze tool overeen mee?
ECB-modus + PKCS#7-padding. In de JCE voert "PKCS5Padding" voor DES het generieke PKCS#7-algoritme uit — PKCS#5 definieerde ooit alleen padding voor blokken van 8 bytes, wat toevallig het blok van DES is. De uitvoer van Java Cipher.getInstance("DES/ECB/PKCS5Padding") wordt hier ontsleuteld met ECB + PKCS#7 en een 8-bytes enkele-DES-sleutel. ⚠️ Java's 3DES (DESede) accepteert alleen 24-bytes sleutels — voor de 2-key-vorm moet je K1‖K2 zelf uitbreiden naar K1‖K2‖K1.
Hoe mappen PHP's des-ede3-algoritmenamen door?
PHP leent de namen van OpenSSL: des-ede3-cbc is 3-key 3DES + CBC, des-ede3-ecb is 3-key + ECB; des-ede-cbc is de 2-key-vorm. Een 24-bytes sleutel selecteert 3-key, 16 bytes selecteert 2-key.
Wat zijn de pariteitsbits in een DES-sleutel? Worden ze gecontroleerd?
De laagste bit van elke sleutelbyte is gedefinieerd als pariteitsbit, dus de echte 56-bits sleutel zit in 64 bits. FIPS 46-3 vereist geen controle — OpenSSL, Java en deze tool negeren het; elke 8 bytes werken, en het veranderen van pariteitsbits verandert de cijfertekst niet. .NET is de uitzondering: het normaliseert eerst de pariteit en controleert dan een tabel met zwakke sleutels, dus nul- en andere zwakke sleutels worden door .NET geweigerd terwijl elke andere bibliotheek gewillig versleutelt — een valkuil die alleen afgaat bij het migreren van testsleutels van Java/OpenSSL naar .NET.
Wat gebeurt er in 3DES als K1 = K2?
In 2-key 3DES is K3 altijd gelijk aan K1; als ook K1 = K2, klapt de hele EDE-keten uiteen in enkele DES: E_K(D_K(E_K(P))) = E_K(P). Hetzelfde gebeurt als alle drie de 8-bytes componenten van een 24-bytes sleutel identiek zijn. Deze tool versleutelt nog steeds (interop eerst), maar de echte sterkte is dan enkele-DES 56 bits, geen 3DES.
Is DES nog veilig?
Nee — het is alleen voor legacy-interop. NIST trok enkele DES op 2005-05-19 terug (56-bits sleutels zijn brute-forceable; de Deep Crack van EFF deed het in 56 uur in 1998, 22 uur het jaar erop met distributed.net). SP 800-131A Rev.2 vermeldt 2-key TDEA-versleuteling als Disallowed en 3-key-versleuteling als Disallowed na 2023-12-31 (ontsleuteling blijft "Legacy use", alleen bedoeld om historische data te lezen); SP 800-67 zelf werd op 2024-01-01 ingetrokken. Het kleine 64-bits blok draagt ook de birthday-grens van de Sweet32-klasse (CVE-2016-2183) — NIST begrenst één key bundle op 2²⁰ blokken (≈8 MB) platte tekst. Gebruik AES-256 voor alles wat nieuw is. Deze tool bestaat omdat bankclearings, betalingsgateways en oude Java/.NET-systemen nog steeds berichten uit het DES-tijdperk draaien — ze herstellen begint met ze kunnen lezen.
Waarom wijkt mijn 3DES-resultaat af van Java/PHP?
Controleer op slagingskans: ① sleutellengte — de "32-hex DES-sleutel" van de andere kant is 16 bytes (2-key 3DES), jij ontsleutelde als enkele DES; ② modus — Java's blote "DES" gebruikt standaard ECB, OpenSSL's namen zonder modus-achtervoegsel, des-ede3/des-ede, zijn ECB (het CBC-alias is -des3); PHP's openssl_encrypt vereist een expliciete algoritmenaam — verwarrend is dat het standaard Base64-tekst uitvoert, geen ruwe bytes; ③ padding — oude PHP mcrypt gebruikte vaak Zero padding, JCE gebruikt PKCS#5/#7; ④ codering — hex vs Base64, en hoofdlettergebruik; ⑤ de CryptoJS-wachtwoordval — een string als "sleutel" doorgeven laat key derivation draaien (MD5 + willekeurige salt, uitvoer met voorvoegsel Salted__, elke keer anders), en dat is helemaal niet de ruwe sleutel — de grootste oorzaak van "dezelfde code, elke run een ander resultaat". Deze tool laat je elk van deze omdraaien; het gelijkwaardige OpenSSL-commando rechts kan naar de andere kant worden gestuurd om het te reproduceren.
ECB of CBC — welke moet ik gebruiken?
Wat het systeem waarmee je praat vereist — legacy-interop heeft geen stem. Als je wel kunt kiezen, dan altijd CBC met een willekeurige IV: ECB versleutelt gelijke plaintextblokken naar gelijke cijfertekstblokken, en de kleine 8-bytes blokken van DES laten patronen nog zichtbaarder lekken dan AES-ECB. Bankprotocollen uit het DES-tijdperk gebruiken beide; raadpleeg eerst het protocoldocument.
Werkt dit offline? Worden mijn gegevens geüpload?
Alle berekening gebeurt in je browser (puur TypeScript, nul afhankelijkheden, nul netwerkverzoeken); sleutels en platte tekst verlaten het apparaat nooit. Zodra de pagina geladen is kun je offline gaan en verder werken. Dat is de enige acceptabele vorm voor een tool die sleutels verwerkt.
2-key of 3-key 3DES — welke komt vaker voor in legacy-systemen?
2-key (16 bytes) komt vaker voor: banken en de betaalsector zetten 16-bytes sleutelhardware in voor compatibiliteit, en SP 800-67 hield voor die vorm een aparte (vroegere) deprecatiedatum aan. Dus een "3DES-sleutel" van 32 hex-tekens is hoogstwaarschijnlijk de 2-key-vorm. Deze tool detecteert de vorm automatisch uit het aantal bytes.