Breaking News
Loading...
Friday, June 7, 2013

Program Enkripsi XOR

9:03 AM

1. Enkripsi
Plainteks = Ini tugas program enkripsi XOR
Merujuk tabel ASCII menjadi bilangan biner :
I = 01001001
n = 01101110
i = 01101001
spasi = 00100000
t = 01110100
u = 01110101
g = 01100111
a = 01100001
s = 01110011
p = 01110000
r = 01110010
o = 01101111
m = 01101101
e = 01100101
k = 01101011
X = 01011000
O = 01001111
R = 01010010

Representasi 8 bit plainteks menjadi bilangan biner:
01001001 01101110 01101001 00100000
01110100 01110101 01100111 01100001
01110011 00100000 01110000 01110010
01101111 01100111 01110010 01100001
01101101 00100000 01101110 01101110
01101011 01101001 01101001 01110000
01101001 01101001 00100000 01011000
01001111 01010010

Kunci = 23209321
Merujuk tabel ASCII menjadi bilangan biner :

2 = 00110010
3 = 00110011
0 = 00110000
9 = 00111001
1 = 00110001

Representasi 8 bit kunci menjadi bilangan biner :
110010 110011 110010 110000
111001 110011 110010 110001



Ket :
- Bit per bit plainteks dan kunci dioperasi binerkan dengan operasi XOR.
- Untuk kunci yang lebih pendek dari plainteks, kunci ditulis berulang-ulang.
- Setiap karakter pada kunci akan berpadanan dengan satu karakter pada plainteks. Walaupun nantinya bentuk 8bit, setiap satu karakter plainteks yang terdiri dari 8 bit akan berpadanan dengan satu karakter kunci yang terdiri dari 8 bit.
- Operasi yang dilakukan bukan untuk satu blok karakter 8 bit, namun per satu bit, sehingga karakter pengganti yang akan dihasilkan dari suatu plainteks akan sangat sulit untuk dicari frekuensinya. Karena kemungkinan menghasilkan pasangan karakter yang sama sangat sulit terjadi.

Sehingga operasi biner XOR plainteks dan kunci dalam bentuk bit dan karakter menurut tabel ASCII :

01001001 01101110 01101001 00100000
00110010 00110011 00110010 00110000
--------------------------------------XOR
01111011 01011101 01011011 00010000
{ ] [ DLE

01110100 01110101 01100111 01100001
00111001 00110011 00110010 00110001
--------------------------------------XOR
01001101 01000110 01010101 01010000
M F U P

01110011 00100000 01110000 01110010
00110010 00110011 00110010 00110000
--------------------------------------XOR
01000001 00010011 01000010 01000010
A DC3 B B

01101111 01100111 01110010 01100001
00111001 00110011 00110010 00110001
--------------------------------------XOR
01010110 01001100 01000000 01010000
V L @ P

01101101 00100000 01101110 01101110
00110010 00110011 00110010 00110000
--------------------------------------XOR
01011111 00010011 01011100 01011110
_ DC3 \ ^

01101011 01101001 01101001 01110000
00111001 00110011 00110010 00110001
--------------------------------------XOR
01010010 01011010 01010100 01000001
R Z T A

01101001 01101001 00100000 01011000
00110010 00110011 00110010 00110000
--------------------------------------XOR
01000111 01011010 00010010 01101000
G Z DC2 h

01001111 01010010
00111001 00110011
------------------XOR
01110110 01100001
v a


Hasil representasi karakter dari hasil operasi biner XOR 8 bit :
{][DLEMFUPADC3BBVL@P_DC3\^RZTAGZDC2hva

Menyusun rangkaian karakter tersebut dengan pola spiral. Algoritmanya sebagai berikut :
a. Karakter pertama akan menjadi pusat spiral.
b. Karakter berikutnya mulai menyusun ke kiri,setelah itu ke bawah, ke kanan dan begitu seterusnya mengikuti pola putaran jarum jam.

Hasil representasi karakter dari hasil operasi biner XOR 8 bit setelah disusun secara spiral, hasilnya adalah :

TABEL :
http://tinypic.com/view.php?pic=2q2e33c&s=7

Sebagai tahap akhir hasil enkripsi dengan pola spiral ini dituliskan lagi dengan pembacaan secara biasa,mulai dari baris pertama kolom sebelah kanan. Sehingga hasil pembacaan cipherteks diatas adalah :
RZTAGZ^UPADC3DC2\F{]BhDC3MDLE[Bv_P@LVa

2. Deskripsi
Untuk proses dekripsi sebagai kebalikan, untuk
memperoleh plainteks dari cipherteks tersebut. Tentu
saja harus mengubah susunan karakter yang ada pada
cipherteks dari struktur spiral yang ditulis ulang
menjadi struktur linear biasa.

Setelah diperoleh kembali dalam pola biasa, barulah
diubah karakter tersebut dalam bentuk 8 bit. Demikian
juga dengan kunci yang diberikan, juga diubah dalam
bentuk 8 bit.

Salah satu keistimewaan operasi biner XOR, adalah
jika A XOR B = C, maka C XOR B = A. Karena itu,
untuk mengubah cipherteks tadi, cukup dengan
mengoperasi binerkan cipherteks dalam bentuk 8 bit
dengan kunci dalam bentuk 8 bit, dengan operasi
XOR. Dari hasil operasi ini diperolehlah plainteks
yang masih dalam bentuk 8bit-8bit. Langkah terakhir
adalah mengubah 8bit tersebut menjadi karakterkarakter.

Edit :
Alhamdulillah, saya menemukan program yang lebih baik dan sangat berhasil dieksekusi untuk melakukan proses enkripsi sekaligus proses deskripsinya, dan tentu saja cocok dengan proses enkripsi dan deskripsi secara pengerjaan manual (namun tanpa pengerjaan proses "spiral". Bahasa pemrograman yang digunakan yaitu Java dengan editor JCreator. Berikut ini list program beserta urutan pengerjaannya :

1. Buat satu folder untuk penempatan file-file yang diperlukan.
2. Buat program enkripsi XOR nya, sbb :


class XOREnkripsi{

public String charToBinary(char c){
int ascii = (int)c;
String binaryCar = Integer.toBinaryString(ascii);
String addBit="";
if(binaryCar.length()<8){
for(int index=0; index < 8-binaryCar.length(); index++){
addBit = "0" +addBit;
}
}
return addBit+binaryCar;
}

public String XORKriptografi (String plain, String key){
StringBuffer enskripsi = new StringBuffer();
for(int index=0; index < plain.length(); index++){
int longKey = key.length();
Character textJ = new Character(plain.charAt(index));
Character keyJ = new Character(key.charAt(index%longKey));
int xor = Integer.parseInt(textJ.toString()) ^ Integer.parseInt(keyJ.toString());
enskripsi.append(xor);
}
return enskripsi.toString();
}

public String binaryToAsciiToString(String onebit){
int ascii;
ascii = Integer.parseInt(onebit, 2);
return Character.toString((char)ascii);
}

}

3. Buat program untuk konversi plainteks ke chiperteks, sbb :

import java.io.*;
import java.util.*;

class PlainToChiper{
public static void main(String[] args)
{
XOREnkripsi xor = new XOREnkripsi();

FileInputStream fis;
PrintWriter pw;
File file;

DataInputStream dis;
BufferedReader br;

String plainText = new String();
String plainKey = new String();
String binaryText = new String();
String binaryKey = new String();
String binaryChiper = new String();
String plainChiper = new String();
String chipperAllText = new String();

//plainText to binaryText
try{

//Reading keyText.txt file
//get plain text from file
fis = new FileInputStream("keyText.txt");
// Get the object of DataInputStream
dis = new DataInputStream(fis);
br = new BufferedReader(new InputStreamReader(dis));

//System.out.println("\nKey : ");
while ((plainKey = br.readLine()) != null) {
//System.out.println(plainKey);
//plainKey to binaryKey
for(int index=0; index < plainKey.length(); index++){
binaryKey = binaryKey + xor.charToBinary(plainKey.charAt(index));
}
}

//System.out.println("Binary Key : ");
//System.out.println(binaryKey+"\n");

//Encripting Process and Writing to File
//Writing Chipertext File
file= new File("chiperText.txt");
file.createNewFile();
pw = new PrintWriter(new FileWriter(file));

//get plain text from file
fis = new FileInputStream("plainText.txt");
// Get the object of DataInputStream
dis = new DataInputStream(fis);
br = new BufferedReader(new InputStreamReader(dis));

//System.out.println("\nPlain Text : ");
while ((plainText = br.readLine()) != null) {
binaryText="";
plainChiper="";
for(int index=0; index < plainText.length(); index++){
binaryText = binaryText + xor.charToBinary(plainText.charAt(index));
}
//System.out.println(plainText);
binaryChiper = xor.XORKriptografi(binaryText,binaryKey);
for(int index=0; index < binaryChiper.length(); index=index+8){
plainChiper=plainChiper+xor.binaryToAsciiToString(binaryChiper.substring(index,index+8));
}
pw.println(plainChiper);
chipperAllText = chipperAllText + plainChiper + "\n" ;

}
pw.flush();
//System.out.println("Binary Plain Text :");
//System.out.println(binaryText+"\n");

//Print Chippertext
System.out.println("\nChippertext : ");
System.out.println(chipperAllText+"\n");

}catch (Exception e){
System.err.println("Error: " + e.getMessage());
}
}
}

4. Buat pula program konversi dari chiperteks ke plainteks, sbb :

import java.io.*;
import java.util.*;

class ChiperToPlain{
public static void main(String[] args)
{
XOREnkripsi xor = new XOREnkripsi();

FileInputStream fis;
PrintWriter pw;
File file;

DataInputStream dis;
BufferedReader br;

String plainText = new String();
String plainKey = new String();
String binaryText = new String();
String binaryKey = new String();
String binaryChiper = new String();
String plainChiper = new String();
String chipperAllText = new String();
String plainTextAfterEnkripsi = new String();

//plainText to binaryText
try{

//Reading keyText.txt file
//get plain text from file
fis = new FileInputStream("keyText.txt");
// Get the object of DataInputStream
dis = new DataInputStream(fis);
br = new BufferedReader(new InputStreamReader(dis));

//System.out.println("\nKey : ");
while ((plainKey = br.readLine()) != null) {
//System.out.println(plainKey);
//plainKey to binaryKey
for(int index=0; index < plainKey.length(); index++){
binaryKey = binaryKey + xor.charToBinary(plainKey.charAt(index));
}
}

//Reading from file and Descripting Process
//get chiptertext from file
fis = new FileInputStream("chiperText.txt");
// Get the object of DataInputStream
dis = new DataInputStream(fis);
br = new BufferedReader(new InputStreamReader(dis));

//get chippertext from file
System.out.println("\nPlain Text After Enkripsi : ");
while ((plainChiper = br.readLine()) != null) {
plainTextAfterEnkripsi="";
binaryChiper="";
//chiperText to chiperBinary
for(int index=0; index < plainChiper.length(); index++){
binaryChiper = binaryChiper + xor.charToBinary(plainChiper.charAt(index));
}
//System.out.println(binaryChiper);
binaryText = xor.XORKriptografi(binaryChiper,binaryKey);
for(int index=0; index < binaryText.length(); index=index+8){
plainTextAfterEnkripsi=plainTextAfterEnkripsi+xor.binaryToAsciiToString(binaryText.substring(index,index+8));
}
System.out.println(plainTextAfterEnkripsi);
}
}catch (Exception e){
System.err.println("Error: " + e.getMessage());
}
}
}

5. Buat file dengan nama file "plainText" yang isinya tentu saja plainteks sbb : "Ini program enkripsi XOR".

6. Buat file juga dengan nama file "keyText" yang isinya kata kunci (NIM saya) sbb : "23209321".

7. Untuk proses enkripsi dengan program Java, maka eksekusi program "PlainToChiper", maka hasilnya adalah sbb :

ENKRIPSI :
http://tinypic.com/view.php?pic=11rbzi8&s=7

8. Untuk proses deskripsi dengan program Java, maka eksekusi program "ChiperToPlain", maka hasilnya adalah sbb :

DESKRIPSI :
http://tinypic.com/view.php?pic=16c6rs6&s=7

0 comments:

Post a Comment

 
Toggle Footer