Teknik enkripsi file – Enkripsi berkaitan dengan sebuah kerahasiaan data. Kerahasiaan dari data atau informasi merupakan suatu kelengkapan pelayanan yang dibuat untuk menjaga agar informasi yang tersimpan tidak dapat dibaca atau dibuka oleh pihak yang tidak berhak.
Beragam konsep perlindungan akan data informasi dapat dilakukan dengan sistem enkripsi dan dekripsi menggunakan algoritma yang telah ditetapkan sebelumnya. Proses enkripsi di sini diartikan sebagai proses perubahan dari suatu pesan asli (plain text) menjadi suatu pesan yang terlindungi dalam hal ini pesan yang tersandi (chiper text), sedangkan untuk proses dekripsi adalah suatu proses pengembalian pesan tersandi yang terlindungi menjadi bentuk data asli pesan tersebut.
AES
Algoritma Advanced Encryption Standard (AES) adalah suatu algoritma block chiper dan mempunyai sifat simetri yang menggunakan kunci simetri pada waktu proses enkripsi dan dekripsi. Tahun 2001, AES digunakan sebagai standar algoritma kriptografi terbaru yang dipublikasikan oleh NIST (National Institute of Standard and Technology) sebagai pengganti algoritma DES (Data Encryption Standard) yang sudah berakhir masa penggunaannya. Algoritma AES adalah algoritma kriptografi yang dapat mengenkripsi dan mendekripsi data dengan panjang kunci yang bervariasi, yaitu 128 bit, 192 bit, dan 256 bit.
Kita bisa melakukan dengan mudah dalam Java baik untuk string ataupun sebuah file/document. Kita coba saja melakukan enkripsi pada string. Key tersebut bisa kalian ubah-ubah dengan panjang 16, 24, atau 32 karakter/bytes dan bersifat rahasia
String ALGO = "AES"; byte [] keyValue = new byte[]{'r','a','h','a','s','i','d','o','n','k','1','2','3','4','5','6'}; //harus 16 karakater 16, 24 or 32 bytes Key key = new SecretKeySpec(keyValue,ALGO); Cipher c = Cipher.getInstance(ALGO); byte [] pesan = "ini adalah pesan".getBytes(); c.init(Cipher.ENCRYPT_MODE, key); byte [] enkripsi = c.doFinal(pesan); c.init(Cipher.DECRYPT_MODE,key); byte [] dekripsi = c.doFinal(enkripsi); System.out.println("Pesan Asli : " + new String(pesan)); System.out.println("Enkripsi : " + new String(enkripsi) ); System.out.println("Dekripsi : " + new String(dekripsi));
hasilnya
Pesan Asli : ini adalah pesan Enkripsi : 6��u6BD�� �`6�?+�#yb���C#f\ Dekripsi : ini adalah pesan
AES menggunakan kunci simetris yang artinya kunci tersebut untuk mengunci dan membuka.
Perhatikan variable pesan yang bertipe byte[] yang artinya kita bisa gunakan juga untuk melakukan semua dokumen/file!
Yuk kita coba saja, pertama-tama kita membuat file terlebih dahulu, misalkan saja test.txt yang nanti akan kita simpan hasil enkripsi dalam sebuah folder enkripsi
String file = "D:/test.txt"; byte [] byteContent = Files.readAllBytes(Paths.get(file)); c.init(Cipher.ENCRYPT_MODE, key); byte [] byteEnkripsi = c.doFinal(byteContent); if(!new File("D:/enkripsi").exists()){ new File("D:/enkripsi").mkdir(); } String fileEnkripsi = "D:/enkripsi/"+new File(file).getName(); //kita simpan hasilnya di Files.write(Paths.get(fileEnkripsi),byteEnkripsi);
perintah Files.write(Paths.get(fileEnkripsi),byteEnkripsi);
memastikan hasilnya akan disimpan dalam folder enkripsi. Nanti kalau kalian buka dengan notepad hasilnya akan ter enkripsi susah dibaca.
Sekarang kita lanjutkan untuk proses dekripsi
//misalkan kita baca lagi file hasil enkripsi byte [] byteContent2 = Files.readAllBytes(Paths.get(fileEnkripsi)); c.init(Cipher.DECRYPT_MODE, key); byte [] byteDekripsi = c.doFinal(byteContent2); //kita simpan hasilnya di String fileDekripsi = "D:/dekripsi/"+new File(file).getName(); if(!new File("D:/dekripsi").exists()){ new File("D:/dekripsi").mkdir(); } Files.write(Paths.get(fileDekripsi),byteDekripsi);
Kalian bisa coba2 untuk enkripsi file gambar! nanti file hasil enkripsi tidak bisa dibuka oleh image viewer pesan error nya not supported. Biasanya sih untuk mengamankan file kalian cukup gunakan perintah blob.
Buatlah filter name terlebih dahulu, misalkan akan proses yang extension nya *.jpg saja
FilenameFilter filter = new FilenameFilter(){ @Override public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(".jpg"); } };
Langkah kedua dapatkan files[] nya
File [] files = new File("D:/").listFiles(filter);
langkah selanjutnya proses enkripsi
for(int i=0;i<files.length;i++){ System.out.println(files[i].getName()); byte [] content = Files.readAllBytes(Paths.get(files[i].getPath())); c.init(Cipher.ENCRYPT_MODE, key); byte [] contentEnkripsi = c.doFinal(content); Files.write(Paths.get("D:/enkripsi/"+files[i].getName()),contentEnkripsi); }
Sedangkan untuk proses dekripsi berkebalikan saja
//dekripsi File [] files2 = new File("D:/enkripsi").listFiles(filter); for(int i=0;i<files2.length;i++){ System.out.println(files2[i].getName()); byte [] content = Files.readAllBytes(Paths.get(files2[i].getPath())); c.init(Cipher.DECRYPT_MODE, key); byte [] contentDekripsi = c.doFinal(content); Files.write(Paths.get("D:/dekripsi/"+files2[i].getName()),contentDekripsi); }
Ternyata proses enkripsi dan dekripsi sangat cepat sekali, walau ukuran gambar nya sangat besar yaitu 4MB per file. Bahkan saya coba untuk file *.mp4 ukuran 90MB tidak sampai 1 detik hanya 0.05 detik saja. Sebenarnya banyak aplikasi diluaran sana yang kalian gunakan untuk melakukan enkripsi, namun kita disini juga bisa membuat file enkripsi sendiri sesuai keinginan. Oiya selain AES juga ada RSA, Blowfish, dan yang lainnya.
Amankan Data dengan Enkripsi bisa kalian gunakan untuk file2 penting saja dan jangan sampai lupa kuncinya! repot nanti kalau kunci nya beda karena tidak bisa dibuka kembali.