Chiffrement / déchiffrement SM4

Chiffrez ou déchiffrez avec SM4 — GB/T 32907-2016, le chiffrement par blocs de 128 bits de la norme nationale chinoise — en modes ECB et CBC avec remplissage PKCS#7. La sortie est identique octet pour octet à openssl enc -sm4-ecb / -sm4-cbc. Tout s’exécute dans votre navigateur ; rien n’est envoyé.
Le remplissage PKCS#7 est toujours appliqué, exactement comme enc d’OpenSSL.
Lire l’entrée comme :
Écrire la sortie comme :
Vérification croisée OpenSSL : chiffrez ici, puis lancez openssl enc -d -sm4-cbc -K <clé-hex> -iv <iv-hex> -in fichier.sm4 -out fichier.txt (ou -sm4-ecb sans -iv) : les octets correspondent exactement, car cette page applique le même remplissage PKCS#7 qu’OpenSSL.
Autotest
Rejoue le vecteur de référence de l’annexe A.1 de GB/T 32907-2016, six vecteurs croisés ECB/CBC déterministes produits par une implémentation de référence Python indépendante, les quatre jeux d’exemples, et les cas négatifs (mauvaise taille de clé, chiffré non multiple de la taille de bloc, remplissage altéré doivent être rejetés).
Qu’est-ce que SM4 ?
En une phrase : SM4 est le chiffrement par blocs de la norme nationale chinoise — un bloc de 128 bits, une clé de 128 bits, un chiffrement à 32 tours sur une structure de Feistel déséquilibrée, publié sous la référence GB/T 32907-2016 (auparavant GM/T 0002-2012), et jouant dans la suite chinoise « SM » le rôle qu’AES joue dans le monde NIST.
SM4 contre AES en un coup d’œil
AspectSM4AES
Taille de bloc128 bits128 bits
Tailles de clé128 bits uniquement128 / 192 / 256 bits
Tours3210 / 12 / 14
StructureFeistel déséquilibré (un mot de 32 bits mis à jour par tour)réseau substitution–permutation (état entier à chaque tour)
S-boxune boîte 8×8, utilisée 4× par tourune boîte 8×8, 16× par tour + MixColumns
Modes standardECB, CBC (cette page) ; GCM/CTR dans les suites TLS (RFC 8998)ECB, CBC, CTR, GCM, ...
Publication2012 (GM/T 0002-2012 ; GB/T 32907-2016) ; dans ISO/IEC 18033-3:20102001 (FIPS 197)

Même tâche, conception différente : ce sont deux chiffrements par blocs de 128 bits avec une S-box publique 8×8, mais SM4 itère 32 tours de Feistel légers tandis qu’AES applique 10 à 14 tours plus lourds sur l’état entier. Logiciellement, AES est en général plus rapide grâce aux instructions matérielles (AES-NI) ; SM4 a obtenu une place comparable grâce à des extensions CPU dédiées dans les plateformes chinoises. Aucun des deux n’a d’attaque pratique ; une clé de 128 bits reste une clé de 128 bits.

Pourquoi utiliser SM4 plutôt qu’AES ?

Conformité et interopérabilité, non robustesse : la réglementation chinoise sur la cryptographie commerciale (商用密码) impose la suite SM dans les secteurs certifiés, et des protocoles comme TLCP et TLS 1.3 avec les suites de la RFC 8998 négocient SM4. Si votre interlocuteur, votre régulateur ou votre matériel ne parle que SM4, vous utilisez SM4. Si vous êtes libre de choisir, AES-256 sur la page AES de ce site reste la référence mondiale.

Erreurs courantes
  • ECB sur des données structurées. Des blocs de texte clair identiques donnent des blocs chiffrés identiques — le classique pingouin. Utilisez CBC (le mode par défaut de cette page) avec un IV neuf dès que les données dépassent un bloc.
  • Une clé fait exactement 16 octets. Contrairement à AES, SM4 n’a pas de variantes de 192 ou 256 bits. Une phrase de passe comme « password » n’est pas une clé — dérivez-en une d’abord avec une KDF (voir le Générateur de hachage de mots de passe).
  • Supposer que le remplissage est facultatif. Cette page — comme enc d’OpenSSL — applique toujours PKCS#7, donc un texte clair de 16 octets se chiffre en 32 octets. Le SM4 brut sans remplissage n’est volontairement pas proposé.
  • Réutiliser un IV en CBC. Une même paire clé + IV en CBC révèle l’égalité des préfixes de messages. Générez un IV aléatoire par message et transmettez-le avec le chiffré.
FAQ

Est-ce compatible avec OpenSSL ? Oui — octet pour octet. openssl enc -sm4-cbc -K 0011... -iv 4455... -in in.txt -out out.sm4 (OpenSSL 1.1.1+) produit exactement le chiffré que cette page affiche pour la même clé, le même IV et la même entrée ; GmSSL fait de même.

Pourquoi pas de SM4-GCM ici ? L’écosystème des bibliothèques proches des normes expose SM4-GCM surtout dans les piles TLS ; la convention de ligne de commande orientée fichiers à laquelle cette page se conforme (enc) couvre ECB/CBC. Le chiffrement SM4 authentifié relève de la couche protocole.

SM4 est-il dans WebCrypto ? Non — aucun navigateur ne l’implémente. C’est pourquoi cette page exécute une implémentation écrite de zéro en JavaScript, avec les vecteurs de test de la norme elle-même branchés sur l’autotest ci-dessus.

Puis-je déchiffrer quelque chose chiffré ailleurs ? Oui, si vous connaissez le mode, la clé, l’IV et si PKCS#7 a été utilisé — collez le chiffré en hexadécimal ou en Base64, passez sur Déchiffrer, et c’est parti.