Le déchiffrement DES échoue avec "bad decrypt" ou une erreur de padding — que vérifier ?
Le déchiffrement exige que chaque paramètre corresponde au côté chiffrement : les octets de la clé, la longueur de clé (8/16/24), le mode (ECB/CBC), l'IV, le padding, et le format du texte chiffré (hex ou Base64). Les deux pièges les plus fréquents : longueur de clé incohérente (une "clé DES" de 32 caractères hex fait 16 octets — c'est du 3DES 2 clés, pas du DES simple) et confusion de nom de padding (le PKCS5Padding de Java EST PKCS#7 pour le DES — ne choisissez pas None). Le panneau repliable à droite affiche une commande OpenSSL équivalente pour les réglages courants ; l'envoyer à l'autre partie est le moyen le plus rapide de trouver la divergence.
Quelle est la longueur d'une clé DES ? Et 3DES ?
DES simple : 64 bits nominaux (8 octets, 56 effectifs — un bit par octet est un bit de parité). Le 3DES existe en deux formes : 2 clés (16 octets, K1‖K2 avec K3=K1) et 3 clés (24 octets, K1‖K2‖K3). Le matériau de clé nominal est de 112/168 bits, mais la force de sécurité effective selon le NIST (SP 800-57 Part 1 Rev.5, tableau 2) n'est que d'environ 80 et 112 bits — et la forme 3 clés est elle aussi dépréciée. Cet outil déduit la forme du nombre d'octets ; tout ce qui n'est pas 8/16/24 lève une erreur — CryptoJS et openssl enc -K tronquent ou comblent en silence, ce qui est la première cause d'échecs d'interopérabilité.
Qu'est-ce que l'IV et quelle est sa longueur pour DES ?
L'IV est la valeur de 8 octets que CBC mélange au premier bloc ; ECB n'en utilise pas. Elle doit faire exactement 8 octets (16 chiffres hex ou 8 caractères ASCII). Attention : l'IV de DES fait 8 octets contre 16 pour AES — copier une longueur d'IV AES échoue immédiatement. Ne réutilisez jamais une IV avec la même clé.
À quoi correspond le DES/ECB/PKCS5Padding de Java dans cet outil ?
Mode ECB + padding PKCS#7. Dans le JCE, "PKCS5Padding" pour le DES exécute l'algorithme générique PKCS#7 — PKCS#5 n'a jamais défini de padding que pour des blocs de 8 octets, justement ceux du DES. La sortie de Cipher.getInstance("DES/ECB/PKCS5Padding") en Java se déchiffre ici avec ECB + PKCS#7 et une clé DES simple de 8 octets. ⚠️ Le 3DES de Java (DESede) n'accepte que des clés de 24 octets — pour la forme 2 clés, vous devez vous-même étendre K1‖K2 en K1‖K2‖K1.
Comment les noms d'algorithmes des-ede3 de PHP correspondent-ils ?
PHP emprunte les noms d'OpenSSL : des-ede3-cbc est 3DES 3 clés + CBC, des-ede3-ecb est 3 clés + ECB ; des-ede-cbc est la forme 2 clés. Une clé de 24 octets sélectionne 3 clés, 16 octets sélectionne 2 clés.
Que sont les bits de parité d'une clé DES ? Sont-ils vérifiés ?
Le bit de poids faible de chaque octet de clé est défini comme bit de parité, si bien que la vraie clé de 56 bits tient dans 64 bits. FIPS 46-3 n'exige pas de la vérifier — OpenSSL, Java et cet outil l'ignorent ; 8 octets quelconques fonctionnent, et modifier les bits de parité ne change pas le texte chiffré. .NET fait exception : il normalise d'abord la parité puis consulte une table de clés faibles, si bien que les clés nulles et autres clés faibles sont rejetées par .NET alors que toutes les autres bibliothèques chiffrent sans broncher — un piège qui ne se déclenche qu'en migrant des clés de test de Java/OpenSSL vers .NET.
Que se passe-t-il en 3DES quand K1 = K2 ?
En 3DES 2 clés, K3 vaut toujours K1 ; si de surcroît K1 = K2, toute la chaîne EDE se réduit au DES simple : E_K(D_K(E_K(P))) = E_K(P). Il en va de même quand les trois composants de 8 octets d'une clé de 24 octets sont identiques. Cet outil chiffre quand même (l'interopérabilité d'abord), mais la force réelle est alors celle du DES simple, 56 bits, pas du 3DES.
DES est-il encore sûr ?
Non — il ne sert qu'à l'interopérabilité avec l'existant. Le NIST a retiré le DES simple le 2005-05-19 (une clé de 56 bits se casse par force brute ; le Deep Crack de l'EFF l'a fait en 56 heures en 1998, 22 heures l'année suivante avec distributed.net). La SP 800-131A Rev.2 classe le chiffrement TDEA 2 clés comme Disallowed, et le chiffrement 3 clés comme Disallowed après le 2023-12-31 (le déchiffrement reste « Legacy use », conservé uniquement pour lire des données historiques) ; la SP 800-67 elle-même a été retirée le 2024-01-01. Les petits blocs de 64 bits portent aussi la borne d'anniversaire de classe Sweet32 (CVE-2016-2183) — le NIST plafonne un même faisceau de clés à 2²⁰ blocs (≈8 Mo) de texte clair. Utilisez AES-256 pour tout projet nouveau. Cet outil existe parce que les chambres de compensation bancaires, les passerelles de paiement et les vieux systèmes Java/.NET font encore tourner des messages de l'ère DES — les corriger commence par pouvoir les lire.
Pourquoi mon résultat 3DES diffère-t-il de Java/PHP ?
Vérifiez par ordre de probabilité : ① longueur de clé — la « clé DES de 32 hex » de l'autre côté fait 16 octets (3DES 2 clés), vous avez déchiffré en DES simple ; ② mode — le "DES" nu de Java fait ECB par défaut, les noms d'OpenSSL sans suffixe de mode, des-ede3/des-ede, sont ECB (l'alias CBC est -des3) ; le openssl_encrypt de PHP exige un nom d'algorithme explicite — la confusion vient de ce qu'il sort du texte Base64 et non des octets bruts ; ③ padding — le vieux mcrypt PHP utilisait souvent Zero, le JCE utilise PKCS#5/#7 ; ④ encodage — hex vs Base64, et la casse ; ⑤ le piège du mot de passe CryptoJS — passer une chaîne comme « clé » déclenche une dérivation de clé (MD5 + sel aléatoire, sortie préfixée Salted__, différente à chaque fois), ce qui n'est pas du tout la clé brute — première cause de « même code, résultat différent à chaque exécution ». Cet outil permet de basculer chacun de ces points ; la commande OpenSSL équivalente à droite peut être envoyée à l'autre partie pour reproduire.
ECB ou CBC — lequel choisir ?
Ce que le système avec lequel vous dialoguez exige — l'interopérabilité avec l'existant ne se discute pas. Si vous avez vraiment le choix, toujours CBC avec une IV aléatoire : ECB chiffre des blocs de texte clair égaux en blocs chiffrés égaux, et les petits blocs de 8 octets du DES laissent voir les motifs encore plus nettement qu'en AES-ECB. Les protocoles bancaires de l'ère DES utilisent les deux ; consultez d'abord la spécification du protocole.
Cela fonctionne-t-il hors ligne ? Mes données sont-elles envoyées ?
Tout le calcul se fait dans votre navigateur (TypeScript pur, zéro dépendance, zéro requête réseau) ; les clés et le texte clair ne quittent jamais l'appareil. Une fois la page chargée, vous pouvez passer hors ligne et continuer à travailler. C'est la seule forme acceptable pour un outil qui manipule des clés.
3DES 2 clés ou 3 clés — lequel est le plus courant dans les systèmes historiques ?
2 clés (16 octets) est le plus courant : les banques et l'industrie du paiement ont déployé du matériel à clés de 16 octets pour des raisons de compatibilité, et la SP 800-67 lui a gardé une date d'obsolescence distincte (antérieure). Une « clé 3DES » de 32 caractères hex est donc très probablement de la forme 2 clés. Cet outil détecte automatiquement la forme d'après le nombre d'octets.