Amankan Data dengan Enkripsi

By | March 27, 2022
1,565 Views

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.

See also  OCR di Java

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.

See also  Aplikasi Scanner Kartu KTP Indonesia

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.