Dekripsi DES gagal dengan "bad decrypt" atau error padding — apa yang harus saya periksa?
Dekripsi mengharuskan setiap parameter cocok dengan sisi yang mengenkripsi: byte kunci, panjang kunci (8/16/24), mode (ECB/CBC), IV, padding, dan apakah ciphertext-nya hex atau Base64. Dua jebakan paling umum: panjang kunci tidak cocok ("kunci DES" 32 karakter hex itu 16 byte — itu 3DES 2-kunci, bukan DES tunggal) dan kebingungan nama padding (PKCS5Padding milik Java ADALAH PKCS#7 untuk DES — jangan pilih None). Panel yang bisa dilipat di sebelah kanan menampilkan perintah OpenSSL yang setara untuk pengaturan saat ini; mengirimkannya ke pihak lain adalah cara tercepat menemukan perbedaannya.
Berapa panjang kunci DES? Dan 3DES?
DES tunggal: 64 bit nominal (8 byte, 56 efektif — satu bit per byte adalah bit paritas). 3DES hadir dalam dua bentuk: 2-kunci (16 byte, K1‖K2 dengan K3=K1) dan 3-kunci (24 byte, K1‖K2‖K3). Materi kunci nominalnya 112/168 bit, tetapi kekuatan keamanan efektif menurut NIST (SP 800-57 Part 1 Rev.5 tabel 2) hanya sekitar 80 dan 112 bit — dan bentuk 3-kunci pun sudah tidak disarankan. Alat ini mengenali bentuknya dari jumlah byte; selain 8/16/24 langsung error — CryptoJS dan openssl enc -K justru memotong diam-diam atau mengisi nol, penyebab utama kegagalan interop.
Apa itu IV dan berapa panjangnya untuk DES?
IV adalah nilai 8 byte yang dicampur CBC ke blok pertama; ECB tidak menggunakannya. Panjangnya harus tepat 8 byte (16 digit hex atau 8 karakter ASCII). Perhatikan bahwa IV DES 8 byte sedangkan IV AES 16 — menyalin panjang IV dari AES langsung gagal. Jangan pernah menggunakan IV yang sama dengan kunci yang sama.
DES/ECB/PKCS5Padding milik Java padanan dengan apa di alat ini?
Mode ECB + padding PKCS#7. Di JCE, "PKCS5Padding" untuk DES menjalankan algoritme PKCS#7 generik — PKCS#5 hanya pernah mendefinisikan padding untuk blok 8 byte, yang kebetulan milik DES. Output dari Java Cipher.getInstance("DES/ECB/PKCS5Padding") dapat didekripsi di sini dengan ECB + PKCS#7 dan kunci DES tunggal 8 byte. ⚠️ 3DES milik Java (DESede) hanya menerima kunci 24 byte — untuk bentuk 2-kunci Anda harus memperluas K1‖K2 menjadi K1‖K2‖K1 sendiri.
Bagaimana pemetaan nama algoritme des-ede3 milik PHP?
PHP meminjam nama-nama OpenSSL: des-ede3-cbc adalah 3DES 3-kunci + CBC, des-ede3-ecb adalah 3-kunci + ECB; des-ede-cbc adalah bentuk 2-kunci. Kunci 24 byte memilih 3-kunci, 16 byte memilih 2-kunci.
Apa itu bit paritas dalam kunci DES? Apakah diperiksa?
Bit terendah setiap byte kunci didefinisikan sebagai bit paritas, jadi kunci 56 bit yang sebenarnya berada di dalam 64 bit. FIPS 46-3 tidak mewajibkan pemeriksaannya — OpenSSL, Java, dan alat ini mengabaikannya; 8 byte apa pun berfungsi, dan mengubah bit paritas tidak mengubah ciphertext. .NET adalah pengecualian: ia menormalkan paritas terlebih dahulu lalu memeriksa tabel kunci lemah, sehingga kunci nol dan kunci lemah lainnya ditolak .NET sementara semua pustaka lain mengenkripsinya dengan senang hati — jebakan yang hanya muncul saat memigrasikan kunci uji dari Java/OpenSSL ke .NET.
Apa yang terjadi pada 3DES saat K1 = K2?
Pada 3DES 2-kunci, K3 selalu sama dengan K1; jika K1 = K2 juga, seluruh rantai EDE runtuh ke DES tunggal: E_K(D_K(E_K(P))) = E_K(P). Hal yang sama terjadi ketika ketiga komponen 8 byte dari kunci 24 byte identik. Alat ini tetap mengenkripsi (interop dulu), tetapi kekuatan sebenarnya menjadi DES tunggal 56 bit, bukan 3DES.
Apakah DES masih aman?
Tidak — hanya untuk interop warisan. NIST menarik DES tunggal pada 19-05-2005 (kunci 56 bit bisa dipecahkan dengan brute force; Deep Crack milik EFF melakukannya dalam 56 jam pada 1998, 22 jam setahun kemudian dengan distributed.net). SP 800-131A Rev.2 mencantumkan enkripsi TDEA 2-kunci sebagai Disallowed, dan enkripsi 3-kunci sebagai Disallowed setelah 2023-12-31 (dekripsi tetap "Legacy use", dipertahankan hanya untuk membaca data historis); SP 800-67 sendiri ditarik pada 2024-01-01. Blok kecil 64 bit juga membawa batas birthday kelas Sweet32 (CVE-2016-2183) — NIST membatasi satu paket kunci pada 2²⁰ blok (≈8 MB) plaintext. Gunakan AES-256 untuk apa pun yang baru. Alat ini ada karena kliring perbankan, payment gateway, dan sistem Java/.NET lama masih menjalankan pesan era DES — memperbaikinya dimulai dari bisa membacanya.
Mengapa hasil 3DES saya berbeda dari Java/PHP?
Periksa sesuai urutan tingkat kejadian: ① panjang kunci — "kunci DES 32-hex" milik pihak lain itu 16 byte (3DES 2-kunci), Anda mendekripsi sebagai DES tunggal; ② mode — "DES" polos milik Java bawaannya ECB, nama OpenSSL tanpa akhiran mode seperti des-ede3/des-ede adalah ECB (alias CBC adalah -des3); openssl_encrypt milik PHP mewajibkan nama algoritma eksplisit — yang membingungkan adalah output bawaannya berupa teks Base64, bukan byte mentah; ③ padding — mcrypt PHP lama sering memakai Zero padding, JCE memakai PKCS#5/#7; ④ encoding — hex vs Base64, serta huruf besar/kecil; ⑤ jebakan password CryptoJS — memberikan string sebagai "kunci" membuatnya menjalankan key derivation (MD5 + salt acak, output berprefiks Salted__, berbeda setiap kali), yang sama sekali bukan kunci mentahnya — penyebab utama "kode sama, hasil berbeda setiap eksekusi". Alat ini memungkinkan Anda mengubah masing-masing; perintah OpenSSL yang setara di sebelah kanan dapat dikirim ke pihak lain untuk mereproduksi.
ECB atau CBC — mana yang harus dipakai?
Apa pun yang disyaratkan sistem yang Anda hadapi — interop warisan tidak punya hak suara. Jika Anda boleh memilih, selalu CBC dengan IV acak: ECB mengenkripsi blok plaintext yang sama menjadi blok ciphertext yang sama, dan blok kecil 8 byte milik DES membocorkan pola lebih terlihat lagi daripada AES-ECB. Protokol perbankan era DES memakai keduanya; periksa dulu dokumen protokolnya.
Apakah ini bekerja offline? Apakah data saya diunggah?
Semua komputasi terjadi di browser Anda (TypeScript murni, tanpa dependensi, tanpa permintaan jaringan); kunci dan plaintext tidak pernah keluar dari perangkat. Setelah halaman termuat Anda bisa offline dan terus bekerja. Itulah satu-satunya bentuk yang dapat diterima untuk alat yang menangani kunci.
3DES 2-kunci atau 3-kunci — mana yang lebih umum di sistem warisan?
2-kunci (16 byte) lebih umum: bank dan industri pembayaran menggelar perangkat keras berkunci 16 byte demi kompatibilitas, dan SP 800-67 menetapkan tanggal deprekasi terpisah (lebih awal) untuknya. Jadi "kunci 3DES" 32 karakter hex kemungkinan besar adalah bentuk 2-kunci. Alat ini mendeteksi bentuknya dari jumlah byte secara otomatis.