Bismillah…
XOR sebagai salah satu logika dasar yang sering terngiang ditelinga kita ternyata mempunyai banyak khasiat keren, salah satunya adalah enkripsi data, karena secara teori logika ini mengembalikan nilai 1 jika input bernilai 1 dan tidak bepasangan.
A 0 0 1 1
B 0 1 0 1
C = A XOR B 0 1 1 0
Dengan logika ini, file dapat kita enkripsi dengan merubah tiap karakter file tersebut menjadi bit biner yang kemudian di XOR kan biner key kita.
Contoh:
Terdapat plainteks dengan “UIN” sebagai isi file tersebut, dan huruf “B” sebagai key-nya, sehingga jika dipecah menjadi karakter dan diterjemahkan kedalam bit-biner sesuai dengan standard ASCII, maka
U = 85 = 1010101,
I = 73 = 1010011,
N = 78 = 1001110 dan
B = 66 = 1000010.
Untuk kode ASCII dapat dilihat dibuku (Pengenalan Komputer, Jogiyanto Hartono hal. 294).
Kita ambil satu karakter misalnya U, dan di XOR kan dengan key, maka didapat:
U (sebagai plainteks) = 1010101
B (sebagai key) = 1000010 XOR
chippertext 0010111
dan dengan XOR juga, kita gunakan chipperteks dan key tersebut untuk dekripsi:
chippertext = 0010111
B (sebagai key) = 1000010 XOR
plaintext 1010101
lanjut…? Monggo…
Program ini sebagai contoh dari implementasi teori diatas, dengan memanfaatkan library java.io, kita dapat memanipulasi dan meng-enkripsi file yang ada sehingga tak terbaca artinya. Untuk menggunakannya, buat file dengan nama “asli.txt” dan isi file tersebut dengan kata misalnya “informatika”, taruh di folder yang sama dengan program ini, compile dan jalankan, program ini secara otomatis akan membuat file baru hasil enkripsi dengan nama “hasilEnkripsi.txt”.
Program enkripsi ini tergolong sederhana, karena hanya menggunakan 1 karakter sebagai key nya, coba bayangkan jika karakter key berjumlah sama dengan plaintext nya 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. Kaya’ gini nih programnya…
import java.io.*;
class konversi {
public static void main(String sunspot []) {
try {
System.out.println(”Masukkan 1 buah huruf untuk enkripsi”);
//input file plainTeks dan KeyTeks
BufferedReader file1 = new BufferedReader(new FileReader(”asli.txt”));
BufferedReader file2 = new BufferedReader(new InputStreamReader(System.in));
PrintWriter cetak = new PrintWriter(new FileWriter(”hasilEnkripsi.txt”));
String plainText = file1.readLine();
int keyText = file2.read(); //membaca huruf sebagai kode int
int font = keyText;
char keyChar = (char)font;
System.out.println(”\n Teks yang akan dienkripsi: “+ plainText);
System.out.println(” Key Huruf: “+ keyChar);
String plainBiner = “”;
String keyBiner = “”;
keyBiner = Integer.toBinaryString(keyText); //konversi int ke biner
System.out.println(” key Text ASCII: “+ keyText);
String chipperText = ” “;
// memecah file menjadi per-karakter
for(int s =0; s
&lt;font size="3"&gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; char y = plainText.charAt(s);&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; int a = (int) y;&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; // merubah tiap karakter menjadi 7 bit biner berkode ASCII&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; // ASCII desimal untuk A..Z adalah 65 - 90&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; plainBiner = Integer.toBinaryString(a);&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; String coba = plainBiner;&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; System.out.print(”\n plainText: ” + coba);&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; System.out.println(”\n key Biner: “+ keyBiner);&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; System.out.println(” ——————–”);&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; System.out.print(” chipperText: “);&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; //chipperText = plainBiner XOR keyBiner&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; for(int m =0; m&amp;amp;lt;7; ++m ) {&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; chipperText = Integer.toBinaryString((Integer.parseInt&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; (plainBiner.substring(m,m+1))) ^ (Integer.parseInt(keyBiner.substring(m,m+1))));&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; //menulis hasil enkripsi pada file “hasilEnkripsi.txt”&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; System.out.print(chipperText);&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; cetak.print(chipperText);&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; }&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; System.out.println(” \n ——————–”);&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; }&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; cetak.close();&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; }&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; catch (IOException e) {&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; e.printStackTrace();&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; }&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; }&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;font face="&amp;amp;quot;Courier New&amp;amp;quot;,Courier,monospace"&amp;gt; }&amp;lt;/font&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;&amp;lt;font size="3"&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt; &amp;amp;nbsp;&amp;lt;/plaintext&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style="text-align: justify;"&amp;gt;&amp;lt;p&amp;gt;&amp;lt;plaintext data-blogger-escaped-.length=".length" data-blogger-escaped-s="s"&amp;gt;demikian sedikit uneg-uneg yang dapat saya salurkan, semoga dapat menjadi inspirasi, sehingga timbul uneg-uneg dalam diri anda, afwan jika ada kesalahan, sangat dinanti kritik, saran, dan jajan dari anda.(sunspot_DNA)&amp;lt;/plaintext&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;/font&gt;&lt;/plaintext&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</plaintext></p></div></div></div></plaintext></div></div></div>
0 Comments