Skip to content

SM4 Şifreleme ve Şifre Çözme Online

SM4 ile online şifreleyin ve çözün. Çözülemezse mod, dolgu, IV ve kodlamadan hangisinin yanlış olduğunu bulup düzeltmeyi önerir. Tarayıcıda çalışır, veri yüklenmez. ECB, CBC, CTR, CFB, OFB; PKCS#7, sıfır dolgusu veya dolgusuz.

Takip Yok Tarayıcıda Çalışır Ücretsiz
Şifreleme tamamen tarayıcınızda çalışır — girdiğiniz anahtar ve veriler bu cihazdan asla çıkmaz.
Şifreli metin
Eşdeğer OpenSSL komutu

OpenSSL 3 gerektirir. Komut, girdiğiniz anahtarı içerir.

GB/T 32907-2016'dan SM4 test vektörleri

Bu sayfanın çalıştırdığı motorla derleme sırasında hesaplandı — kendi SM4 implementasyonunuzu bunlarla kontrol edin.
Anahtar 0123456789abcdeffedcba9876543210
Düz metin 0123456789abcdeffedcba9876543210
Şifreli metin, 1 şifreleme 681edf34d206965e86b3e94f536e4246
Şifreli metin, 1.000.000 şifreleme 595298c7c6fd271f0402f804c33d3f66
SM4 motoru, GB/T 32907-2016 Ek A'daki iki vektöre karşı test edilmiş ve ECB, CBC, CTR, CFB ve OFB modlarında OpenSSL 3 ile çapraz kontrol edilmiştir. Kütüphane varsayılanları OpenSSL, Node.js, sm-crypto, gm-crypt, gmssl ve iki Go kütüphanesi çalıştırılarak, Hutool ile BouncyCastle ise kaynak kodları okunarak kontrol edilmiştir. — Go Tools Güvenlik Ekibi · Sep 11, 2026

Kriptografik araçlar geliştiren yazılımcılar tarafından yazılmış ve incelenmiştir. Bu sayfada geçen her şifreli metin ve bayt sayısı aracın motoruyla hesaplanır ve testlerle kontrol edilir.

SM4 için hızlı yanıtlar

SM4 anahtar uzunluğu

16 bayt Tam olarak 128 bit: 16 bayt; 32 hex basamağı veya 16 ASCII karakter olarak yazılır. 192 veya 256 bitlik SM4 anahtarı yoktur.

GB/T 32907 test vektörü

681edf34d206965e86b3e94f536e4246 Anahtar ve düz metin 0123456789abcdeffedcba9876543210 olduğunda tek şifreleme 681edf34d206965e86b3e94f536e4246 verir.

SM4 blok boyutu ve tur sayısı

32 tur 16 baytlık (128 bitlik) bloklar, 32 turda şifrelenir.

CBC'de yanlış IV her zaman hata verir mi?

ilk 16 bayt Hayır. Yalnızca ilk 16 bayt yanlış çözülür; son bloktaki dolgu ise kontrolden yine geçer.

SM4 nedir?

SM4, Çin'in ticari kriptografi standartlarındaki blok şifresidir. GM/T 0002-2012 olarak yayımlandı, GB/T 32907-2016 numaralı ulusal standart oldu (1 Mart 2017'den beri yürürlükte) ve 2021'de yapılan bir değişiklikle uluslararası ISO/IEC 18033-3 standardına eklendi. Simetrik bir şifredir: aynı 128 bitlik anahtar hem şifreler hem de şifreyi çözer; 128 bitlik bloklar üzerinde, her seferinde 16 bayt işler — AES ile aynı blok boyutu.

İçeride her blok dört adet 32 bitlik sözcüğe bölünür ve 32 turdan geçirilir. Her turda sözcüklerden üçü bir tur anahtarıyla karıştırılır, sonuç 8 bitlik bir S-kutusundan ve doğrusal bir dönüşümden geçirilip dördüncü sözcüğe katılır. 32 tur anahtarı, iki sabit değer kümesi kullanılarak anahtardan türetilir; şifre çözme de tur anahtarlarını ters sırada kullanan aynı hesaplamadır.

Blok şifresi tek başına yalnızca tam 16 baytı işleyebilir; bu yüzden gerçek veri her zaman bir çalışma modundan geçer. Bu araç beş klasik modu sunar: tam bloklarla çalışan ve dolgu gerektiren ECB ile CBC; SM4'ü hiç dolgu gerektirmeyen bir akış şifresine dönüştüren CTR, CFB ve OFB. Başarısız şifre çözmelerin çoğunun SM4'ün kendisiyle ilgisi yoktur — iki tarafın mod, dolgu, IV, metin kodlaması ya da anahtar dizesinin nasıl bayta dönüştüğü konusunda anlaşamamasından kaynaklanır; kütüphaneler çıplak bir "SM4" ifadesinin ne anlama geldiği konusunda bile anlaşamaz.

Tarayıcıların yerleşik Web Crypto API'si SM4 içermez; bu yüzden bu sayfa kendi implementasyonunu taşır ve yerel olarak çalıştırır. Bu implementasyon iki GB/T 32907 test vektörüne karşı test edilmiş ve her modda OpenSSL 3 ile çapraz kontrol edilmiştir.

// SM4-CBC with PKCS#7 padding using Node.js and its bundled OpenSSL 3.
// Key and IV are both exactly 16 bytes (32 hex digits).
const crypto = require('node:crypto');

const key = Buffer.from('0123456789abcdeffedcba9876543210', 'hex');
const iv = Buffer.from('fedcba98765432100123456789abcdef', 'hex');

const cipher = crypto.createCipheriv('sm4-cbc', key, iv);
const ciphertext = Buffer.concat([cipher.update('hello', 'utf8'), cipher.final()]);
console.log(ciphertext.toString('base64')); // fUQPRg2HAXHGz5ZslzCpSQ==

const decipher = crypto.createDecipheriv('sm4-cbc', key, iv);
const plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
console.log(plaintext.toString('utf8')); // hello

SM4 aracının özellikleri

Şifre çözmenin neden başarısız olduğunu söyler

Şifre çözme başarısız olduğunda sayfa şifreli metin kodlamasını, anahtar biçimini, modu, IV'yi, dolguyu ve metin kodlamasını yeniden dener ve okunabilir metin veren ayarları gösterir.

Olağan şüpheliler için kütüphane ön ayarları

Tek tıkla OpenSSL, Hutool, sm-crypto, gm-crypt veya tjfoc/gmsm varsayılanlarını ayarlar — bu kütüphaneler yalın "SM4" ifadesinin ECB mi yoksa CBC mi olduğu konusunda bile anlaşamaz.

Beş mod, üç dolgu, UTF-8 veya GBK

PKCS#7, sıfır dolgusu veya dolgusuz olarak ECB, CBC, CTR, CFB ve OFB. Düz metin UTF-8 ya da eski Java kodunun Çince Windows'ta ürettiği kodlama olan GBK olabilir. GCM desteklenmez.

SM4 anahtarı ve IV: rastgele ya da hex, metin veya Base64 olarak

Tek tıkla rastgele 16 baytlık bir anahtar veya IV üretin ya da kodunuzun yazdığı biçimde girin. Canlı bayt sayacı, başka nedenlerin peşine düşmeden önce elinizde tam 16 bayt olduğunu doğrular.

Sayfada GB/T 32907 test vektörleri

Ek A'daki iki sonuç da bir tabloda yer alır ve tek tıkla yüklenebilir; böylece herhangi bir SM4 implementasyonunu standarda göre kontrol edebilirsiniz.

Eşdeğer OpenSSL komutu

Her sonuç, onu yeniden üreten openssl enc komutuyla birlikte gelir; böylece sonucu terminalde doğrulayabilir ya da bir iş arkadaşınıza iletebilirsiniz.

Tamamen tarayıcınızda çalışır

SM4 motoru yerel olarak çalışır. Anahtarlar ve veriler sayfadan asla çıkmaz; araç çevrimdışıyken de çalışmaya devam eder.

Yaygın kütüphanelerde SM4 varsayılanları

OpenSSL 3 (openssl enc)

-sm4 = CBC

-sm4, -sm4-cbc için bir takma addır. -K ve -iv hex alır; -nopad verilmedikçe PKCS#7 açık kalır ve -base64 -A eklenmedikçe çıktı ham baytlardır. Yanlış uzunlukta bir -K yalnızca bir uyarıyla kısaltılır ya da sıfırla doldurulur.

Java: Hutool SmUtil.sm4(key)

ECB · PKCS#7

Hutool yalın bir SM4 iletir; BouncyCastle bunu PKCS#7 dolgulu ECB olarak çalıştırır (JCE buna PKCS5Padding der). String metotları UTF-8 kullanır ve encryptHex küçük harfli hex yazdırır. CBC için new SM4(Mode.CBC, Padding.PKCS5Padding, key, iv) kullanın.

Java: BouncyCastle Cipher.getInstance("SM4")

ECB · PKCS#7

IV gerektiren bir modda IV verilmezse şifreleme sessizce rastgele bir IV üretir, şifre çözme ise no IV set when one expected fırlatır — yani o IV saklanmadan şifrelenmiş bir metin hiçbir yerde çözülemez.

JavaScript: sm-crypto

ECB · hex anahtar

sm4.encrypt(data, key) varsayılan olarak PKCS#7 dolgulu ECB kullanır, anahtarı 32 haneli bir hex dizesi olarak bekler ve küçük harfli hex döndürür. Modu yalnızca mode: 'cbc' değiştirir; başka her değer sessizce ECB'de kalır. sm-crypto-v2 aynı şekilde davranır, ancak CBC'ye iv verilmezse tamamı sıfır bir IV kullanır.

JavaScript: gm-crypt

CBC · metin anahtar · Base64

Varsayılan olarak CBC kullanır, anahtarı ve IV'yi 16 karakterlik UTF-8 dizeleri olarak alır ve Base64 döndürür. Baytları geçerli UTF-8 olmayan bir anahtar ona hiç verilemez.

Python: gmssl CryptSM4

PKCS#7 · anahtar 16 bayta kısaltılır

Modu crypt_ecb veya crypt_cbc çağırarak seçersiniz. set_key yalnızca ilk 16 baytı okur; bu yüzden daha uzun bir anahtar sessizce kısaltılır ve yanlış bir anahtar genellikle hata yerine boş bayt döndürür.

Go: tjfoc/gmsm sm4

varsayılan olarak sıfır IV

Sm4Cbc, SetIV çağrılana kadar tamamı sıfır kalan paket düzeyinde bir IV kullanır, CFB ve OFB'de bile PKCS#7 dolgusu uygular ve dolgu kaldırma hatalarını yok sayar — yanlış bir anahtar hata vermeden nil döndürür.

SM4 şifreleme ve şifre çözme örnekleri

GB/T 32907 test vektörü (ECB, dolgusuz)

Anahtar 0123456789abcdeffedcba9876543210, düz metin (hex) 0123456789abcdeffedcba9876543210
681edf34d206965e86b3e94f536e4246

Bu, GB/T 32907-2016 Ek A'daki birinci örnektir: anahtar ve düz metin aynı 128 bitlik değerdir ve tek bir şifreleme 681edf34d206965e86b3e94f536e4246 verir. Her seferinde bir önceki çıktıyı yeniden şifreleyerek toplam bir milyon kez şifrelediğinizde 595298c7c6fd271f0402f804c33d3f66 elde edilir. İki değer de bu sayfadaki test vektörü tablosunda yer alır ve kullandığınız motorun aynısıyla hesaplanmıştır. GB/T 32907 test vektörü düğmesi ilkini yükler.

PKCS#7 dolgulu CBC: metin girer, Base64 çıkar

Anahtar 0123456789abcdeffedcba9876543210, IV fedcba98765432100123456789abcdef, düz metin: SM4 interop test: order 20260911-0042
Wi6BuLpov8RndEfedUyLXFvDRnLMoo7T6O04Q83IzKDuDvPQ2S5clq+cEQXMvy/y

Düz metin UTF-8 olarak 37 bayttır. PKCS#7 bunu 48 bayta, yani üç adet 16 baytlık bloğa tamamlar; Base64 bu 48 baytı 64 karakterle yazar. Örnek yükle düğmesi tam olarak bu değerleri doldurur, OpenSSL paneli de aynı Base64 dizesini terminalde yeniden üreten bir komut gösterir.

CBC'de yanlış IV: yalnızca ilk 16 bayt bozulur

Yukarıdaki şifreli metin, IV 00000000000000000000000000000000 ile çözülüyor
16 bayt anlamsız veri, ardından ": order 20260911-0042"

CBC, IV'yi yalnızca ilk bloğa katar; PKCS#7 dolgusu ise son bloktadır. Bu yüzden dolgu kontrolü yine geçer ve OpenSSL hata vermez. Bu sayfa okunamayan ilk bloğu fark eder ve anahtarla modun doğru, sorunun IV'de olduğunu söyler — ya da şifreli metnin ilk 16 baytının IV'nin kendisi olduğunu.

SM4 şifreleme ve çözme aracı nasıl kullanılır

  1. 1

    Bir kütüphane ön ayarı ya da mod ve dolgu seçin

    Karşı taraftaki kütüphaneyi biliyorsanız onu Kütüphane varsayılanları altından seçin. Bilmiyorsanız Şifrele veya Çöz'ü seçip mod ve dolguyu eşleştirin. Akış modlarında (CTR, CFB, OFB) dolgu olmadığı için bu modlarda dolgu seçicisi devre dışıdır.

  2. 2

    Anahtarı ve IV'yi girin

    İkisi de tam olarak 16 bayttır. Dizenin yazıldığı biçimi seçin — hex, metin veya Base64 — ve bayt sayacının yeşile dönmesini izleyin. Rastgele düğmeleri yeni değerler üretir.

  3. 3

    Girdiyi yapıştırın

    Şifreleme için metin yazın (UTF-8 veya GBK) ya da hex baytlar yapıştırın. Şifre çözme için şifreli metni yapıştırın ve Base64 mü hex mi olduğunu belirtin. Sonuç siz yazdıkça güncellenir.

  4. 4

    Sonucu kopyalayın ya da gidiş-dönüşü kontrol edin

    Çıktıyı kopyalayın ya da aynı anahtar ve IV ile şifre çözme sekmesine taşımak için Bu şifreli metni çöz düğmesine tıklayın. OpenSSL paneli sonucu yeniden üreten bir komut gösterir.

  5. 5

    Şifre çözme başarısız olursa tanıyı okuyun

    Tanı, girdilerinizin okunabilir metne çözüldüğü ayarları listeler. Birini tek tıkla uygulayın; yalnızca ilk 16 bayt çözülmüyorsa nota bakın — bu, IV'ye işaret eder.

SM4 şifre çözme neden başarısız olur

Hex anahtarı metin olarak okumak

32 karakterlik bir hex dizesi yalnızca hex olarak çözüldüğünde 16 bayttır. Metin olarak okunduğunda 32 bayttır ve SM4 bunu reddeder — anahtarları sessizce kısaltan ya da dolduran kodlarda ise bambaşka bir anahtara dönüşür.

✗ Yanlış
Anahtar (metin): 0123456789abcdeffedcba9876543210  -> 32 bayt, reddedildi
✓ Doğru
Anahtar (hex):   0123456789abcdeffedcba9876543210  -> 16 bayt

CBC şifreli metnini ECB ile çözmek

İki taraf aynı modu kullanmalıdır. ECB ile çözülen CBC şifreli metni her blokta anlamsız veri verir ve genellikle sondaki dolgu kontrolünden de geçemez.

✗ Yanlış
şifreleme: SM4/CBC/PKCS5Padding
çözme:     SM4/ECB/PKCS5Padding  -> bad decrypt
✓ Doğru
şifreleme: SM4/CBC/PKCS5Padding
çözme:     SM4/CBC/PKCS5Padding, aynı IV

Farklı bir IV kullanmak

CBC'de yanlış IV hata vermez: ilk 16 bayt bozuk çıkar, geri kalanı normal şekilde çözülür. Düz metninizin yalnızca başı bozuksa iki taraftaki IV'yi karşılaştırın.

✗ Yanlış
çözmede kullanılan IV: 00000000000000000000000000000000
-> 16 bayt anlamsız veri + ": order 20260911-0042"
✓ Doğru
çözmede kullanılan IV: fedcba98765432100123456789abcdef
-> "SM4 interop test: order 20260911-0042"

Base64 şifreli metni hex sanmak

Base64 ve hex, aynı baytları yazmanın iki farklı yoludur. Birini diğeri gibi okumak şifreye en baştan yanlış girdi verir.

✗ Yanlış
Wi6BuLpov8RndEfedUyLXFvDRnLMoo7T6O04Q83IzKDuDvPQ2S5clq+cEQXMvy/y  hex olarak okundu -> geçersiz
✓ Doğru
Wi6BuLpov8RndEfedUyLXFvDRnLMoo7T6O04Q83IzKDuDvPQ2S5clq+cEQXMvy/y  Base64 olarak okundu -> 48 bayt

Sıfır dolgusunun gerçek sondaki sıfırları silmesi

Sıfır dolgusu dolguyu veriden ayırt edemez; bu yüzden gerçekten 0x00 ile biten düz metin bu baytları kaybeder. Düz metin olmayan her şey için PKCS#7 kullanın.

✗ Yanlış
sıfır dolgusu: 61 62 00  -> 61 62 olarak çözülür
✓ Doğru
PKCS#7:        61 62 00  -> 61 62 00 olarak çözülür

"SM4" ifadesinin her yerde aynı modu kastettiğini varsaymak

OpenSSL sm4 ifadesini CBC olarak yorumlar. BouncyCastle — dolayısıyla Hutool'un SmUtil.sm4(key) çağrısı da — SM4 ifadesini PKCS#7 dolgulu ECB olarak yorumlar. İkisi de "yalnızca SM4 kullanan" iki sistem mod konusunda anlaşamayabilir.

✗ Yanlış
Java:    Cipher.getInstance("SM4")  -> ECB + PKCS#7
OpenSSL: openssl enc -sm4           -> CBC
✓ Doğru
Java:    Cipher.getInstance("SM4/CBC/PKCS5Padding")
OpenSSL: openssl enc -sm4-cbc

Bir tarafta GBK, diğer tarafta UTF-8 baytlarını şifrelemek

Java'da karakter seti belirtilmeden çağrılan getBytes() platform varsayılanını kullanır; Çince Windows'ta JDK 17 veya öncesinde bu GBK'dir. Aynı Çince metin böylece farklı bir şifreli metne dönüşür ve karşı taraf onu bozuk karakterlere (mojibake) çözer.

✗ Yanlış
"国密SM4 test".getBytes()  // Çince Windows'ta JDK <= 17 ile GBK
-> ECB şifreli metni 3188d06cf28db70092f8753cbd5ee518
✓ Doğru
"国密SM4 test".getBytes(StandardCharsets.UTF_8)
-> ECB şifreli metni d830308b0ae4fa7b9a2b5d59f7f65ca5

Online SM4 şifreleme ne zaman gerekir

Backend ile frontend arasında SM4 çıktısını eşleştirin
Java servisiniz ile web istemciniz aynı metin için farklı şifreli metin üretiyor. Her iki tarafı burada kendi kütüphane ön ayarıyla yeniden üretin ve hangi parametrenin farklı olduğunu görün.
İş ortağı sisteminden gelen başarısız şifre çözmede hata ayıklayın
Bir iş ortağı çözülmeyen bir SM4 şifreli metni gönderiyor. Metni üzerinde anlaşılan anahtar ve IV ile yapıştırın; tanı, karşı tarafın gerçekte kullandığı mod, dolgu veya kodlamayı bulsun.
Bir SM4 implementasyonunu doğrulayın
Implementasyon üretim verisine yaklaşmadan önce kodunuzu bu sayfadaki GB/T 32907 vektörleriyle çalıştırın, ardından bir CBC gidiş-dönüşünü karşılaştırın.
SM4'e geçiş için test verisi hazırlayın
Bir sistem AES'ten SM4'e geçerken, yeni testlerde fixture olarak kullanmak üzere bilinen anahtar, IV ve şifreli metin üçlülerini burada üretin.
Blok şifresi modlarının nasıl davrandığını görün
Birbirinin aynı iki bloğu ECB ve CBC'de şifreleyin ya da yanlış bir IV ile çözün; şifreli metinde ve çıktıda neyin değiştiğini izleyin.

SM4 ve çalışma modları nasıl işler

Blok boyutu, anahtar boyutu ve turlar
SM4, 128 bitlik blokları 128 bitlik bir anahtarla 32 turda şifreler. Her tur 32 bitlik bir sözcüğe 8 bitlik bir S-kutusu, ardından sözcüğü kendisinin dört döndürülmüş haliyle XOR'layan doğrusal bir dönüşüm uygular. Şifre çözme aynı 32 turu, tur anahtarları ters sırada olacak şekilde çalıştırır.
ECB: her blok kendi başına
ECB her 16 baytlık bloğu bağımsız olarak şifreler. IV gerektirmez, ama aynı düz metin blokları aynı şifreli metin bloklarına dönüşür; bu yüzden verideki örüntüler görünür kalır. Girdi 16 baytın katı değilse dolgu gerekir.
CBC: zincirlenmiş bloklar ve bir IV
CBC her düz metin bloğunu şifrelemeden önce bir önceki şifreli metin bloğuyla XOR'lar; ilk blok için IV'yi kullanır. IV yalnızca ilk bloğa girdiği için yanlış bir IV düz metnin tam olarak ilk 16 baytını bozar ve son bloktaki dolguya dokunmaz; bu yüzden çoğu zaman hiç hata oluşmaz.
CTR, CFB ve OFB: akış şifresi olarak SM4
Bu modlar bir sayaç veya geri besleme değerini şifreler ve sonucu veriyle XOR'lar; bu yüzden şifreli metin düz metinle aynı uzunluktadır ve dolgu yoktur. CTR'de 16 baytlık IV'nin tamamı, OpenSSL ile uyumlu olarak tek bir 128 bitlik big-endian sayaç gibi artırılır. Yanlış bir IV, CTR ve OFB'de mesajın tamamını, CFB'de ise yalnızca ilk bloğu bozar.
Dolgu kuralları
PKCS#7, değeri n olan n bayt ekler (n, 1 ile 16 arasındadır); bu yüzden zaten tam sayıda bloktan oluşan bir mesaj da bir tam blok dolgu alır. Sıfır dolgusu yalnızca gerektiğinde 0x00 baytları ekler ve şifre çözerken sondaki tüm sıfırları siler. Dolgusuz mod veriyi olduğu gibi bırakır ve tam blokları doldurmayan girdiyi reddeder.

SM4 şifreleme için en iyi uygulamalar

Yeni tasarımlarda ECB seçmeyin
ECB hangi blokların aynı olduğunu sızdırır. Zaten ECB kullanan mevcut bir sistemle uyum sağlamanız gerekmiyorsa CBC veya CTR kullanın.
Her mesaj için yeni ve rastgele bir IV kullanın
IV gizli değildir, ama aynı anahtarla tekrarlanmamalıdır. Her mesaj için rastgele üretin ve şifreli metnin yanında saklayın ya da gönderin.
Şifreli metnin bütünlüğünü doğrulayın
Blok şifresi çalışma modlarını tanımlayan Çin standardı GB/T 17964-2021, anlattığı modların bütünlüğü değil gizliliği koruduğunu belirtir. CBC'de IV'nin tek bir baytını değiştirmek pay=100.00 değerini pay=900.00 yapar ve şifre çözme yine başarılı olur. IV ve şifreli metin üzerinden bir MAC hesaplayın ve şifreyi çözmeden önce kontrol edin; örneğin HMAC üretici ile.
Her parametreyi arayüz belirtimine yazın
"SM4 ile şifrelenmiş" bir belirtim değildir. Modu, dolguyu, anahtar ile IV'nin nasıl kodlandığını, düz metnin karakter setini ve şifreli metnin hex mi Base64 mü olduğunu yazılı olarak belirtin.
Gerçek anahtarları web sayfalarından ve kaynak koddan uzak tutun
Bu sayfayı test anahtarlarıyla kullanın. Üretim anahtarlarının yeri bir anahtar yönetim sistemi veya donanım güvenlik modülüdür (HSM); bu anahtarlar yapıştırılmak ya da depoya işlenmek yerine çalışma zamanında yüklenmelidir.

SM4 şifreleme hakkında sık sorulan sorular

SM4 şifre çözme neden dolgu hatası veriyor ya da anlamsız metin çıkarıyor?
Şifre çözme ancak her şey şifreleyen tarafla eşleştiğinde çalışır: anahtar baytları, mod, IV, dolgu ve şifreli metnin nasıl yazıldığı (hex veya Base64). Aldığınız hata — "bad decrypt", bir dolgu istisnası ya da ekran dolusu anlamsız karakter — hangisinin yanlış olduğunu söylemez; bazı kütüphaneler ise hata vermek yerine boş çıktı döndürür. Yine de şifreli metni, anahtarı ve IV'yi buraya yapıştırın. Şifre çözme başarısız olduğunda sayfa; şifreli metin kodlaması, anahtar biçimi, mod, IV ve dolgunun tüm kombinasyonlarını yeniden dener — bir kütüphanenin sessizce 16 bayta kısalttığı anahtarlar ve GBK ile kodlanmış düz metin dahil — ve okunabilir metin veren yorumları listeler; PKCS#7 dolgusu doğrulananları ayrıca işaretler. Yalnızca ilk 16 bayt yanlış çıkıyorsa anahtar ve mod doğrudur, IV yanlıştır.
SM4 anahtarı ne uzunlukta olmalı, 256 bit olabilir mi?
SM4 anahtarı tam olarak 128 bit, yani 16 bayttır — blok boyutuyla aynı. GB/T 32907 yalnızca bu tek anahtar uzunluğunu tanımlar; 192 veya 256 bitlik SM4 yoktur. Biri sizden 256 bitlik bir SM4 anahtarı istiyorsa, 32 haneli bir hex dizesinin her biri 8 bitlik 32 karakter olarak sayılıp sayılmadığını kontrol edin. On altı bayt 32 hex basamağı ya da 16 ASCII karakter olarak yazılabilir ve bu ikisini karıştırmak en yaygın anahtar hatasıdır: 0123456789abcdeffedcba9876543210 hex olarak okunduğunda 16 bayttır, ama aynı dize metin olarak okunduğunda 32 bayttır ve reddedilir. Anahtar alanının yanındaki biçim seçicisi ve bayt sayacı tam da bunu yakalamak için vardır.
SM4'te IV nedir ve kaç bayt olmalı?
IV (başlatma vektörü), CBC, CTR, CFB ve OFB'de ilk bloğa katılan 16 baytlık bir değerdir; ECB IV kullanmaz. Tam olarak 16 bayt olmalıdır — 32 hex basamağı veya 16 ASCII karakter — bu yüzden bir IV uzunluk hatası alırsanız 32 haneli bir hex dizesinin 32 baytlık metin olarak okunup okunmadığını kontrol edin. IV gizli değildir, ama aynı anahtarla tekrarlanmamalıdır: rastgele üretin ve şifreli metinle birlikte, çoğunlukla onun önüne ekleyerek gönderin. CBC'de yanlış bir IV genellikle hata vermez, yalnızca ilk 16 baytı bozar. Bazı kütüphaneler IV verilmediğinde sessizce tamamı sıfır bir IV kullanır (sm-crypto-v2, Go'daki tjfoc/gmsm); Java'daki BouncyCastle ise rastgele bir IV üretir — o IV şifreli metinle birlikte saklanmadıysa kimse şifreyi çözemez.
SM4 ECB ile CBC arasındaki fark nedir, hangisini kullanmalıyım?
Her mesaj için yeni ve rastgele bir IV ile CBC (veya CTR) kullanın. ECB aynı 16 baytlık blokları aynı şifreli metin bloklarına dönüştürür; bu yüzden verideki tekrarlanan yapı şifreli metinde de görünür. ECB'yi yalnızca zaten onu kullanan bir sistemle konuşmanız gerekiyorsa seçin. İki modun da kurcalamayı tespit etmediğini unutmayın: bu sizin için önemliyse IV ve şifreli metin üzerinden hesaplanmış bir MAC de gönderin; örneğin HMAC üretici ile.
Hangi SM4 dolgusunu kullanmalıyım: PKCS5Padding, PKCS#7, sıfır dolgusu veya dolgusuz?
PKCS#7 her zaman 1 ile 16 arasında bayt ekler ve eklenen her bayt, eklenen bayt sayısını taşır; böylece alıcı dolguyu belirsizlik olmadan kaldırabilir. SM4 gibi 16 baytlık bir blok şifresi için Java'nın PKCS5Padding dolgusu da aynı dolgudur — BouncyCastle iki adı da aynı kod yoluna yönlendirir. Sıfır dolgusu yalnızca bir sonraki blok sınırına kadar 0x00 ekler. Şifre çözerken Hutool ve BouncyCastle sondaki bütün 0x00 baytlarını siler, gerçekten verinin parçası olan sıfır baytlar da dahil; Python'daki gmssl ise yalnızca birini siler. Dolgusuz modda girdi, 16 baytlık blokların tam katı olmalıdır. CTR, CFB ve OFB akış modlarıdır ve hiç dolgu kullanmaz. Çözülen metnin sonunda başıboş boşluklar, kutucuklar veya satır sonları varsa dolgu kaldırılmamıştır: PKCS#7 verisi dolgusuz çözülürse sonunda değeri n olan n bayt kalır (0x09, 0x0A ve 0x0D sekme ve satır sonu olarak görünür); çıktıyı Hex'e çevirip son bloğa bakın.
SM4 şifreli metni ne uzunlukta olur, mod şifreli metne bakarak anlaşılır mı?
Bayt cinsinden sayın. ECB veya CBC'de PKCS#7 ile düz metin bir sonraki 16'nın katına yuvarlanır; zaten 16'nın katı olan bir mesaj ise bir tam blok daha alır — 5 veya 15 bayt 16 olur, 16 bayt 32 olur. Sıfır dolgusu yalnızca bir sonraki 16'nın katına kadar doldurur, dolgusuz modda uzunluk değişmez; CTR, CFB ve OFB şifreli metni de düz metinle tam olarak aynı uzunluktadır. Hex bayt sayısını ikiye katlar; Base64 ise 4 × ⌈bayt / 3⌉ karakter tutar, yani 16 bayt 24 karakter, 32 bayt 44 karakter, 64 bayt 88 karakterdir. IV önde taşınıyorsa 16 bayt ekleyin. Şifreli metin tek başına modu ele vermez, ama iki ipucu işe yarar: 16'nın katı olmayan bir uzunluk dolgulu ECB veya CBC'yi neredeyse kesin olarak eler, birbirinin aynı iki 16 baytlık blok ise ECB'ye işaret eder. Emin değilseniz metni şifre çözme sekmesine yapıştırın; otomatik tanı modları sizin yerinize dener.
SM4 her seferinde aynı şifreli metni mi üretir, başka bir aracın sonucu neden farklı?
ECB — ya da sabit IV'li herhangi bir mod — aynı anahtar ve düz metin için her seferinde aynı şifreli metni verir; her çalıştırmada yeni ve rastgele bir IV kullanılıyorsa çıktı, olması gerektiği gibi, her seferinde değişir. Bunun dışında şunları karşılaştırın: mod, dolgu, anahtarın hex olarak mı metin olarak mı okunduğu, düz metnin nasıl kodlandığı — kodların çoğunda UTF-8, ama eski Java kodu Çince Windows sisteminde getBytes() çağırdığında GBK — ve sonucun nasıl yazdırıldığı: Base64, küçük harfli hex veya büyük harfli hex. Ayarlar aynı ve IV sabitse iki doğru implementasyon birebir aynı çıktıyı üretir. Araçlardan birinden şüpheleniyorsanız önce ikisini de GB/T 32907 test vektörüyle kontrol edin.
Kendi SM4 implementasyonumun doğru olduğunu nasıl kontrol ederim?
GB/T 32907-2016 Ek A'daki iki vektörle başlayın. Anahtar ve düz metin ikisi de 0123456789abcdeffedcba9876543210 olduğunda tek şifreleme 681edf34d206965e86b3e94f536e4246, art arda bir milyon şifreleme ise 595298c7c6fd271f0402f804c33d3f66 vermelidir. Bu vektörler yalnızca blok şifresini test eder; bu yüzden ardından sabit bir anahtar ve IV ile CBC'de biraz metin şifreleyin ve sonucu bu sayfayla ya da sayfanın gösterdiği OpenSSL komutuyla karşılaştırın. Bu sayfanın arkasındaki motor, iki vektöre karşı ve beş modun tamamında OpenSSL 3'e karşı test edilmiştir.
OpenSSL, SM4 ile şifreleyip çözebilir mi?
Evet. OpenSSL 3, SM4'ü ECB, CBC, CFB, OFB ve CTR modlarında içerir. openssl enc -sm4-cbc -K <32 hex digits> -iv <32 hex digits> kullanın: -K ham anahtarı hex olarak alır, dolayısıyla işin içinde parola yoktur; -nopad PKCS#7'yi kapatır, -base64 -A ise tek satırlık Base64 okur veya yazar. İki şeye dikkat edin: yalın -sm4 CBC anlamına gelir ve yanlış uzunlukta bir -K değeri yalnızca bir uyarıyla kesilir ya da sıfırla doldurulur. Bu sayfadaki OpenSSL paneli komutu mevcut ayarlarınızdan oluşturur; openssl enc sıfır dolgusunu desteklemediği için panel, eşleşmeyecek bir komut yazdırmak yerine bunu açıkça belirtir.
Java (Hutool) veya JavaScript (sm-crypto) ile üretilmiş SM4 şifreli metnini nasıl çözerim?
Önce karşı tarafın gerçekte hangi mod ve dolguyu kullandığını öğrenin — çoğu zaman kod bunu hiç belirtmez. Hutool'un SmUtil.sm4(key) çağrısı yalnızca SM4 adını iletir ve BouncyCastle eksikleri PKCS#7 dolgulu ECB ile tamamlar (Java'da PKCS5Padding); yalnızca SM4/CBC/PKCS5Padding gibi tam bir dize CBC anlamına gelir. JavaScript'te sm-crypto da varsayılan olarak ECB kullanır, anahtarı 32 haneli bir hex dizesi olarak alır ve küçük harfli hex yazdırır; gm-crypt ise varsayılan olarak CBC kullanır, 16 karakterlik bir metin anahtarı alır ve Base64 yazdırır. Ardından düz metnin karakter setini kontrol edin: Hutool'un string metotları her zaman UTF-8 kullanır, ama Çince Windows üzerinde JDK 17 veya öncesinde çıplak bir getBytes() GBK anlamına gelebilir ve bu da şifreli metni değiştirir. Bunları tek tıkla ayarlamak için kütüphaneyi Kütüphane varsayılanları altından seçin ya da kendiniz girin; biri belirsizse şifreli metni yine de yapıştırın, otomatik tanı mod, dolgu, IV ve kodlama kombinasyonlarını dener.
SM4 güvenli mi, verilerim yükleniyor mu?
Algoritma olarak SM4, 128 bitlik bir anahtar ve 32 tur kullanır; RFC 8998 (2021), yazıldığı tarihte SM4 için bilinen zayıf anahtar veya güvenlik sorunu olmadığını belirtir. Pratik riskler kullanım biçiminden gelir: ECB örüntüleri sızdırır, CBC ise kurcalamayı tespit etmez. Bu sayfaya gelince, hiçbir şey yüklenmez. Tarayıcılar SM4 içermez; bu yüzden bu sayfa kendi SM4 implementasyonunu taşır ve yerel olarak çalıştırır. Network sekmesini açıp hiçbir isteğin gitmediğini izleyebilir ya da bağlantınızı kesip aracı kullanmaya devam edebilirsiniz. Bu, aracı test verisi, hata ayıklama ve öğrenme için uygun kılar. Ama bir web sayfasını üretim anahtarları için doğru yer yapmaz: onların yeri herhangi bir web sitesindeki bir metin kutusu değil, bir anahtar yönetim sistemi veya donanım modülüdür.
SM4 ile AES arasındaki fark nedir?
İkisi de 128 bitlik bloklarla çalışan blok şifreleridir ve modlar ile dolgu ikisinde de aynı şekilde işler — SM4 birlikte çalışabilirlik hatalarının AES'tekilerle birebir aynı görünmesinin nedeni budur. SM4 32 tur çalışır ve tek bir anahtar boyutu vardır: 128 bit; AES-128 10 tur çalışır ve AES'in 192 ve 256 bitlik anahtarları da vardır. SM4, Çin'in ulusal standardı GB/T 32907-2016'dır ve 2021'den beri AES'in yanında uluslararası ISO/IEC 18033-3 standardının bir parçasıdır; Çin ticari kriptografisinin şart koşulduğu yerlerde kullanılır. AES ise NIST standardı FIPS 197'dir. AES için AES şifreleme aracını kullanın.

AES Şifre Çözme Aracı — OpenSSL ve CryptoJS Uyumlu

Güvenlik Araçları

AES şifreli metnini online çözün — GCM/CBC/CTR, parola veya ham anahtar, OpenSSL ve CryptoJS "U2FsdGVkX1" biçimini otomatik algılar. %100 tarayıcıda, anahtarlar sayfadan asla çıkmaz.

AES Şifreleme Aracı — GCM, CBC ve CTR

Güvenlik Araçları

Ücretsiz online AES şifreleme — AES-128/192/256, GCM/CBC/CTR, parola (PBKDF2) veya ham anahtar. %100 tarayıcınızda çalışır; hiçbir şey yüklenmez.

Bcrypt Karma Oluşturucu ve Doğrulayıcı

Güvenlik Araçları

bcrypt şifre karmalarını çevrimiçi oluşturun ve doğrulayın — ayarlanabilir maliyet, $2b$/$2a$/$2y$ önekleri. %100 tarayıcınızda; şifreniz asla yüklenmez.

CRC Sağlama Toplamı Hesaplayıcı

Güvenlik Araçları

Onaltılık veya metin yapıştırın; CRC-8, CRC-16 ve CRC-32'nin 63 çeşidi aynı anda hesaplansın. Tutturamadığınız bir sağlama toplamı mı var? Yazın, araç çeşidi söylesin: MODBUS, CCITT-FALSE, XMODEM. Tamamen tarayıcınızda çalışır.

HMAC Üretici ve İmza Doğrulayıcı

Güvenlik Araçları

Ücretsiz online HMAC üretici ve doğrulayıcı. Metin, Hex veya Base64 anahtarlarla ve Hex/Base64/Base64URL çıktısıyla HMAC-SHA256/SHA1/SHA384/SHA512 hesaplayın. %100 tarayıcınızda — anahtarlar sayfadan asla çıkmaz.

JWT Çözücü

Güvenlik Araçları

Ücretsiz JWT çözücümüzle JWT token'larını online çözün. header, payload, signature, son kullanma, algoritma ve claim'leri anında inceleyin. %100 tarayıcıda çalışır — token'ınız cihazınızdan ayrılmaz. Kayıt yok, izleme yok.