Dragonica Emoticon Sparkly Eye
14 Mar 2012

Enkripsi XOR, Pengenalan

Masih ingat operasi logika dalam pelajaran ”Logika Matematika dan Teori Himpunan” atau ”Sistem Digital”? Di sana tentu ada operator logika bernama OR, AND, NOR, NAND, dan XOR. Nah, ternyata operasi XOR sering digunakan dalam mengekripsi suatu data. Hasilnya? Data baru yang dihasilkan memang agak susah ditebak…tetapi ada yang bilang kalau sudah diketahui data aslinya maka key dari enkripsi ini dengan mudah diketahui.

Secara singkat, operasi XOR akan mengembalikan nilai 1 jika jumlah operand bernilai satu ganjil, jika tidak maka akan mengembalikan hasil 0. Berikut ini contohnya:
1 XOR 1 = 0
1 XOR 0 = 1
0 XOR 1 = 1
0 XOR 0 = 0

Bagaimana jika 1 XOR 1 XOR 1? Hasilnya 1. Benarkah?
Dalam kriptografi, pembuatan chiper (teks hasil enkripsi) melalui operasi XOR merupakan suatu algoritma enskripsi yang relatif sederhana. Teknik ini beroperasi sesuai dengan prinsip:
A XOR 0 = A,
A XOR A = 0,
(B XOR A) XOR A = B XOR 0 = B,
Dengan logika ini, suatu string teks dapat diekripsi dengan menerapkan operasi XOR berbasis bit (binary digit) terhadap setiap karakter menggunakan key tertentu. Bagaimana mendekripsi outputnya untuk mendapatkan plaintext kembali? Dengan menerapkan operasi XOR terhadap chiper.
Sebagai contoh, string “Wiki” jika ditulis dalam format ASCII 8 bit menjadi 01010111 01101001 01101011 01101001 dapat dienkripsi dengan suatu key misalnya 11110011 sebagai berikut:
01010111 01101001 01101011 01101001
11110011 11110011 11110011 11110011
——————————————– (XOR)
10100100 10011010 10011000 10011010 (Hasil)
Dan sebaliknya, untuk dekripsi adalah:

10100100 10011010 10011000 10011010
11110011 11110011 11110011 11110011
——————————————– (XOR)
01010111 01101001 01101011 01101001 (Hasil)
Operator XOR sering dijadikan sebagai salah satu komponen dalam pembentukan chiper yang lebih kompleks. Namun, penggunaan suatu key yang berulang secara konstan menyebabkan suatu chiper dapat dengan mudah dipecahkan menggunakan analisis frekuensi (seperti dibahas pada huruf yang paling sering muncul dalam suatu bahasa). Keutamaan dari teknik ini adalah mudah diimplementasikan dan operasi XOR tidak mahal secara komputasional. Karena itu, chiper XOR masih sering kali digunakan untuk menyembunyikan informasi dalam kasus dan kemudian dilengkapi dengan suatu mekanisme keamanan tambahan. Akan tetapi, jika key dibuat sepanjang message (pesan), tidak berulang dan bit-bitnya bersifat random, maka akan menghadirkan efek one-time-pad (dikenal pula sebagai chiper Vernam) yang tidak dapat dipecahkan, bahkan dalam teori sekalipun.
Chiper XOR benar-benar lemah terhadap serangan plaintext umum, karena plaintext XOR ciphertext = key.
menunjukkan perubahan secara manual dari plaintext “Wiki” ke chipertext menggunakan enkripsi XOR. Kali ini, sebuah program Java memperlihatkan cara melakukan konversi tersebut secara otomatis…tentunya melalui pemrograman. Program ini dibuat dengan bahasa Java di lingkungan grafis (IDE) Netbeans. Kode program tidak memperlihatkan konfigurasi jFrame,karena dari tampilannya anda tentu sudah tahu komponen atau class apa saja yang digunakan.

Singkatnya, ada 3 jTextField, 2 jBUtton dan 1 jTextArea yang dipasang di atas jFrame. Eh…maaf…juga ada 3 jPanel dan 1 jLabel… tapi ini tidak diproses di dalam perhitungan enkripsi XOR .
Program enkripsi XOR dengan Java
Program enkripsi XOR dengan Java
Program ini melakukan:
1. Ambil plaintext (jTextField1)
2. Ambil keytext (jTextField2). Jika kosong maka dianggap “A”. Jika tidak sama panjang dengan plaintext… ya..dipanjangin. Kalo mau random juga boleh.
3. Ubah setiap karakter dari plaintext dan keytext ke biner 8 bit dan XOR, simpan dalam plainBinary dan keyBinary.
4. XOR-kan plainBinary dengan keyBinary. Simpan dalam chiperbinary berbentuk biner.
ChiperBinary tidak diterjemahkan ke bentuk huruf lagi karena dapat menghasilkan karakter kontrol yang tidak dapat ditampilkan (nilai ASCII 0 sampai dengan 31).
Jika tidak yakin dengan chiperbinary yang diberikan, silakan chiperBinary tersebut di-XOR-kan dengan
keyBinary. Jika hasilnya sama dengan plainBinary berarti chiperbinay-nya benar :)
Ini kode untuk tombol “Ciptakan Key Random”:
01private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
02        //buat key random sepanjang plaintext;
03        //ASCII untuk A..Z adalah 65 s.d 90
04        String randomKey = "";
05        double randomNumber;
06        for (int i=0; i<jTextField1.getText().length(); i++) {
07            randomNumber = Math.random() * 25 + 65;
08            randomKey = randomKey + (char)randomNumber;
09        }
10
11        jTextField2.setText(randomKey);
12    }
Sedangkan proses enkripsi XOR diperlihatkan kode berikut (tombol “Enkripsikan !”):
01private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
02        //lakukan ekripsi XOR terhadap jTextField1 dengan key di jTextField2.
03        //hasilnya di jTextField3
04
05        jTextArea1.setText("");
06
07        String plainText = jTextField1.getText();
08        String keyText = jTextField2.getText();
09        String chiperBinary = "";
10
11        //jika key hanya 1 karakter atau tidak sepanjang plaintext       
12        if ( keyText.length() != plainText.length()) {
13            if (keyText.length() == 0 )
14                keyText = "A";
15            String tempKeyText = "";
16            for (int i=0; i &lt; plainText.length(); i++)
17                tempKeyText = tempKeyText +  keyText.substring(0,1);
18            keyText = tempKeyText;
19        }
20
21        jTextField2.setText(keyText);       
22        
23        //plainText XOR keyText
24        for (int i=0; i &lt; plainText.length(); i++) {
25            //ubah ke ASCII, ubah ke biner 8 bit, XOR-kan
26            String plainBinary = &quot;0&quot; + Integer.toBinaryString((int) plainText.charAt(i));
27
28            //khusus karakter non alfabet di bawah 32 seperti spasi
29            if (plainBinary.length() &lt; 8)
30                plainBinary = &quot;0&quot; + plainBinary;
31
32            String keyBinary = &quot;0&quot; + Integer.toBinaryString((int) keyText.charAt(i));
33            //konversi Strig ke integer
34
35            for (int j=0; j &lt; 8; j++)
36                //chiperBinary = chiperBinary + Integer.toString(xor);
37                chiperBinary = chiperBinary + Integer.toString((Integer.parseInt(plainBinary.substring(j, j + 1))) ^ (Integer.parseInt(keyBinary.substring(j, j + 1))));
38        }
39
40        jTextArea1.setText(chiperBinary);
41    }

3 komentar:

hanum mengatakan...

terkait dengan penerapan enkripsi, bisa diunduh artikel berikut http://repository.gunadarma.ac.id/bitstream/123456789/2274/1/01-03-010-Penerapan%5BRangga%5D.pdf

duniaku mengatakan...

Keren blog nya ,
Saya minta tolong donk artike yang mengenai xor ini , soal nya saya pake logika xor ini untuk enkripsi file transaksi , tp menggunakan bahasa pemrograman php (web). mohon di bantu yah
e-mail :fatirinus@gmail.com , Pin BB :76c099b3
trimkash

Unknown mengatakan...

adakah contoh untuk enkripsi source cod php, dengan menggunakan php. saya sedang membuat itu tp bingung

Posting Komentar

 
;