Algoritma enkripsi des
DES adalah standar enkripsi data nama lengkap, yang merupakan algoritma blok yang menggunakan enkripsi utama. Itu ditentukan sebagai Standar Pemrosesan Data Federal (FIPS) oleh Kantor Standar Nasional Pemerintah Federal A.S. pada tahun 1976, dan kemudian secara luas diedarkan secara internasional.
Ada tiga parameter entri dari algoritma DES: kunci, data, dan mode. Di antara mereka, kuncinya adalah 7 byte, total 56 bit, yang merupakan kunci kerja dari algoritma DES; Data adalah 8 byte, total 64 bit, yang merupakan data yang akan dienkripsi atau didekripsi; Mode adalah mode kerja DES: enkripsi atau dekripsi.
Algoritma DES mengubah blok input plaintext 64-bit menjadi blok output ciphertext 64-bit. Kunci yang digunakannya juga 56-bit. Algoritme -nya terutama dibagi menjadi dua langkah:
1) Fungsi permutasi awal adalah untuk menggabungkan kembali blok data input 64-bit dalam bit dan membagi output menjadi dua bagian: L0 dan R0, masing-masing bagian panjangnya 32 bit. Aturan permutasi adalah untuk mengganti bit ke -58 dari input ke bit pertama, bit ke -50 ke bit kedua ... dan seterusnya, bit terakhir adalah bit ke -7 asli. L0 dan R0 adalah dua bagian setelah output transposisi, L0 adalah 32 bit kiri output, dan R0 adalah 32 bit kanan. Contoh: Tetapkan nilai input sebelum transposisi ke D1D2D3 ... D64, maka hasilnya setelah permutasi awal adalah: L0 = D58D50 ... D8; R0 = D57D49 ... D7.
Aturan pengganti ditampilkan dalam tabel berikut:
58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8 , 57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,
2) Setelah 16 operasi iterasi, L16 dan R16 diperoleh. Ambil ini sebagai input dan lakukan permutasi terbalik. Permutasi terbalik adalah operasi terbalik dari permutasi awal, sehingga mendapatkan output ciphertext.
Algoritma ini adalah perwakilan dari sistem algoritma enkripsi simetris dan banyak digunakan dalam sistem jaringan komputer.
Implementasi Java Dasar
paket com.stone.security; impor java.security.key; impor java.security.securerandom; impor javax.crypto.cipher; impor javax.crypto.keygenerator; impor javax.crypto.secretkey; impor javax.crypto.secretkeyfactory; impor javax.crypto.spec.deskeyspec; impor javax.crypto.spec.ivparameterspec; / *** DES Algorithm 1972 Dikembangkan oleh IBM di Amerika Serikat, algoritma enkripsi simetris*/ kelas publik des {// nama algoritma string final statis public key_algorithm = "des"; // Nama Algoritma/Mode Enkripsi/Metode Isi Public Static Final String Cipher_algorithm_EcB = "DES/ECB/PKCS5PADDING"; string final statis publik cipher_algorithm_cbc = "des/cbc/pkcs5padding"; public static void main (string [] args) melempar pengecualian { / * * Gunakan mode ECB * generator kunci untuk menghasilkan kunci * mode ECB tidak dapat menggunakan iv * / byte [] key = generateKey (); byte [] encrypt = encrypt ("Gasculitis F#*(x)". getBytes (), key); System.out.println (String baru (Decrypt (Encrypt, Key))); / * * Gunakan mode CBC * Gunakan pabrik kunci untuk menghasilkan kunci, enkripsi dan dekripsi * IV: DES dalam mode CBC dan cipher RSA dengan operasi penyandian OAEP. */ Deskeyspec dks = deskeyspec baru (generatey ()); SecretKeyFactory factory = SecretkeyFactory.getInstance (KEY_ALGORITHM); Secretkey Secretkey = factory.generateSecret (DKS); Cipher cipher = cipher.getInstance (cipher_algorithm_cbc); cipher.init (cipher.encrypt_mode, Secretkey, ivparameterspec baru (getiv ())); byte [] enc = cipher.dofinal ("Gasculitis a%f#*(x)". getBytes ()); // enkripsi cipher.init (cipher.decrypt_mode, secretkey, ivparameterspec baru (getiv ())); byte [] dec = cipher.dofinal (enc); // decrypt system.out.println (string baru (dec)); } static byte [] getiv () {string iv = "asdfivh7"; // Panjang IV: Harus 8 byte Return IV.getbytes (); } / ** * menghasilkan tombol * * @return * @throws Exception * / private static byte [] generatey () melempar pengecualian {keygenerator keygenerator = keygenerator.getInstance (key_algorithm); keygenerator.init (56); // DES HARUS 56, metode awal ini tidak harus memanggil Secretkey Secretkey = keygenerator.generateKey (); return Secretkey.getencoded (); } / ** * Kembalikan tombol * * @param Key * @return * @throws Exception * / Private Static Key ToKey (byte [] Key) melempar Exception {deskeyspec des = new deskeyspec (key); SecretKeyFactory KeyFactory = SecretKeyFactory.getInstance (key_algorithm); Secretkey Secretkey = KeyFactory.GenerateSecret (DES); Return Secretkey; } / *** Encrypt* @param Data Teks asli* @param Key* @return cipherText* @throws Exception* / public static byte [] encrypt (byte [] data, byte [] key) melempar pengecualian {key k = toKey (key); Cipher cipher = cipher.getInstance (cipher_algorithm_ecb); cipher.init (cipher.encrypt_mode, k, new Securerandom ()); return cipher.dofinal (data); } / *** dekripsi* @param kata sandi data* @param Key* @return teks biasa, teks asli* @throws Exception* / public static byte [] decrypt (byte [] data, byte [] key) melempar pengecualian {key k = toKey (key); Cipher cipher = cipher.getInstance (cipher_algorithm_ecb); cipher.init (cipher.decrypt_mode, k, new SecureRandom ()); return cipher.dofinal (data); }} Implementasi Java Triple Des:
paket com.stone.security; impor javax.crypto.cipher; impor javax.crypto.keygenerator; impor javax.crypto.secretkey; impor javax.crypto.secretkeyfactory; impor javax.crypto.spec.desededekeyspec; impor javax.crypto.spec.ivparameterspec; / ** * Triple Encryption 3Des juga digunakan sebagai triple des, */ kelas publik Tripledes {// Nama Algoritma Public Static Final String Key_algorithM = "Desede"; // Nama Algoritma/Mode Enkripsi/Metode Isi Public Static Final String Cipher_algorithm_ecb = "Desede/ECB/PKCS5PADDING"; string final statis publik cipher_algorithm_cbc = "desede/cbc/pkcs5padding"; keygenerator private keygen; Secretkey Secretkey pribadi; Secretkey Secretkey2 pribadi; cipher cipher pribadi; byte statis pribadi [] encryptData; public static void main (string [] args) melempar Exception {tripledes tripledes = tripele baru ("ECB"); tripledes.encrypt ("Sau8jzxlcvm, '123`98 (*^&%^^ jcb zx >> a <s <}} {"); System.out.println ("setelah enkripsi:" + string baru (tripledes.decrypt (encryptdata)); tripled =); cbcripled (encryptdata)); tripled = "); tripledes.encrypt2 ("SAU8JZXLC DQV#> <« | VM, '123`98 (*^&%^^ JCB ZX >> A <S <}} {"); System.out.println (" After Encryption: " + New String (EncryptData); System.out.out.pint (" After Encryption: " + New String (EncryptData); System.out.out.pint (" setelah enkripsi: " + new string (encryptdata); System.out.out.out.pint:" + encryptdata); System.out.out.out.pint: " + encryptdata); System.out.out.out.pint:" + encryptdata); System.out.out.pint. String (Tripledes.Decrypt2 (EncryptData))); Keygenerator.getInstance (key_algorithm); Desedeyspec (keygen.generateKey (). GetEncoded ()); cipher.init (cipher.encrypt_mode, Secretkey); return encryptData = cipher.dofinal (str.getbytes ()); } / ** * Decrypt * @param Encrypt * @return * @throws Exception * / public byte [] decrypt (byte [] enkripsi) melempar pengecualian {cipher.init (cipher.decrypt_mode, secretkey); return encryptData = cipher.dofinal (enkripsi); } byte [] getiv () {return "administ" .getBytes (); } / ** * Encrypt * @param str * @return * @throws Exception * / public byte [] encrypt2 (string str) melempar pengecualian {cipher.init (cipher.encrypt_mode, Secretkey2, ivparameterspec baru (getiv ())); return encryptData = cipher.dofinal (str.getbytes ()); } / ** * Decrypt * @param Encrypt * @return * @throws Exception * / Byte Public [] decrypt2 (byte [] enkripsi) melempar pengecualian {cipher.init (cipher.decrypt_mode, SecretKey2, ivparameterspec baru (getiv ()); return encryptData = cipher.dofinal (enkripsi); }}