SM4 versleutelen / ontsleutelen

Codeer of decodeer met SM4 — GB/T 32907-2016, de Chinese nationale standaard-blokcijfer van 128 bits — in de ECB- en CBC-modi met PKCS#7-opvulling. De uitvoer is byte voor byte compatibel met openssl enc -sm4-ecb / -sm4-cbc. Alles draait in uw browser; er wordt niets geüpload.
PKCS#7-opvulling wordt altijd toegepast, precies zoals bij OpenSSL enc.
Invoer lezen als:
Uitvoer schrijven als:
OpenSSL-kruiscontrole — codeer hier, en voer daarna openssl enc -d -sm4-cbc -K <hexkey> -iv <hexiv> -in file.sm4 -out file.txt uit (of -sm4-ecb zonder -iv): de bytes komen exact overeen, omdat deze pagina dezelfde PKCS#7-opvulling toepast als OpenSSL.
Zelftest
Speelt de bekende-antwoordvector uit bijlage A.1 van GB/T 32907-2016 af, zes deterministische ECB/CBC-kruisvectoren geproduceerd door een onafhankelijke Python-referentie-implementatie, alle vier de voorbeeldpools, en de negatieve paden (verkeerde sleutelgrootte, cijfertekst die geen veelvoud van het blok is, gemanipuleerde opvulling moet worden afgewezen).
Wat is SM4?
In één zin: SM4 is het Chinese nationale standaard-blokcijfer — een blok van 128 bits, een sleutel van 128 bits, een cijfer van 32 ronden met een ongebalanceerde Feistel-structuur, gepubliceerd als GB/T 32907-2016 (eerder GM/T 0002-2012), en vervult in de Chinese "SM"-suite de rol die AES in de NIST-wereld speelt.
SM4 versus AES in één oogopslag
KenmerkSM4AES
Blokgrootte128 bits128 bits
Sleutelgroottesalleen 128 bits128 / 192 / 256 bits
Ronden3210 / 12 / 14
Structuurongebalanceerd Feistel (één 32-bits woord per ronde bijgewerkt)substitutie-permutatienetwerk (hele staat elke ronde)
S-boxéén 8×8-box, 4× per ronde gebruiktéén 8×8-box, 16× per ronde + MixColumns
StandaardmodiECB, CBC (deze pagina); GCM/CTR in TLS-suites (RFC 8998)ECB, CBC, CTR, GCM, ...
Gepubliceerd2012 (GM/T 0002-2012; GB/T 32907-2016); opgenomen in ISO/IEC 18033-3:20102001 (FIPS 197)

Zelfde werk, ander ontwerp: beide zijn blokcijfers van 128 bits met een openbare 8×8-S-box, maar SM4 doorloopt 32 lichte Feistel-ronden, terwijl AES 10–14 zwaardere ronden over de hele staat toepast. In software is AES meestal sneller dankzij hardware-instructies (AES-NI); SM4 kreeg op Chinese platforms vergelijkbare positie met speciale CPU-extensies. Geen van beide heeft een praktische aanval; de sleutel van 128 bits is de sleutel van 128 bits.

Waarom zou ik SM4 gebruiken in plaats van AES?

Het gaat om naleving en interoperabiliteit, niet om sterkte: Chinese regelgeving voor commerciële cryptografie (商用密码) verlangt de SM-suite in gecertificeerde sectoren, en protocollen zoals TLCP en TLS 1.3 met de RFC 8998-suites onderhandelen over SM4. Als uw tegenpartij, toezichthouder of hardware alleen SM4 spreekt, gebruikt u SM4. Bent u vrij in de keuze, dan blijft AES-256 op de AES-pagina van deze site de wereldwijde standaard.

Veelgemaakte fouten
  • ECB op gestructureerde gegevens. Identieke platte-tekstblokken geven identieke cijferblokken — de klassieke pinguïn. Gebruik CBC (de standaard van deze pagina) met een nieuw IV wanneer de gegevens langer zijn dan één blok.
  • Een sleutel is precies 16 bytes. In tegenstelling tot AES kent SM4 geen varianten van 192/256 bits. Een wachtwoordzin als "password" is geen sleutel — leid er eerst een af met een KDF (zie de wachtwoordhashgenerator).
  • Aannemen dat opvulling optioneel is. Deze pagina past — net als OpenSSL enc — altijd PKCS#7 toe, dus een platte tekst van 16 bytes wordt 32 bytes cijfertekst. Ruwe SM4 zonder opvulling wordt bewust niet aangeboden.
  • Een IV hergebruiken in CBC. Een herhaald sleutel+IV-paar in CBC lekt de gelijkheid van begin van berichten. Genereer per bericht een willekeurig IV en lever het samen met de cijfertekst aan.
Veelgestelde vragen

Is dit compatibel met OpenSSL? Ja — byte voor byte. openssl enc -sm4-cbc -K 0011... -iv 4455... -in in.txt -out out.sm4 (OpenSSL 1.1.1+) levert precies de cijfertekst die deze pagina voor dezelfde sleutel, hetzelfde IV en dezelfde invoer afdrukt; GmSSL is hetzelfde.

Waarom hier geen SM4-GCM? Het aan standaarden verwante bibliotheekecosysteem stelt SM4-GCM vooral beschikbaar binnen TLS-stacks; de bestandsgerichte opdrachtregelconventie die deze pagina volgt (enc) dekt ECB/CBC. Geauthenticeerde SM4 hoort op de protocollaag thuis.

Zit SM4 in WebCrypto? Nee — geen enkele browser implementeert het. Daarom draait deze pagina een vanaf nul geschreven JavaScript-implementatie, met de eigen testvectoren van de standaard bedraad in de zelftest hierboven.

Kan ik iets decoderen dat elders is gecodeerd? Ja, als u de modus en de sleutel en het IV kent en weet dat PKCS#7 is gebruikt — plak de cijfertekst als hex of Base64, schakel over naar Decoderen en ga.