Lompat ke konten Lompat ke sidebar Lompat ke footer

Tutorial Enkripsi Algoritma Rc4 Dengan Php

Algoritma RC4


RC4 merupakan merupakan salah satu jenis stream cipher, yaitu memproses unit atau input data pada satu saat. Dengan cara ini enkripsi atau dekripsi sanggup dilaksanakan pada panjang yang variabel. Algoritma ini tidak harus menunggu sejumlah input data tertentu sebelum diproses, atau menambahkan byte komplemen untuk mengenkrip. Metode enkripsi RC4 sangat cepat kurang lebih 10 kali lebih cepat dari DES. 
RC4 merupakan stream cipher yang didesain oleh Rivest untuk RSA Data Security (sekarang RSA Security) pada 1987. RC4 memakai panjang variabel kunci dari 1 s.d 256 byte untuk menginisialisasi state tabel. State table dipakai untuk pengurutan menghasilkan byte pseudo-random yang lalu menjadi stream pseudo-random. Setelah di-XOR dengan plaintext sehingga didapatkan ciphertext. Tiap elemen pada state table di swap sedikitnya sekali. Kunci RC4 sering dibatasi hingga 40 bit, tetapi dimungkinkan untuk mengunakan kunci 128 bit. RC4 mempunyai kemampuan penggunaan kunci antara 1 hingga 2048 bit. 
Panjang kunci merupakan faktor utama dalam sekuritas data. RC4 sanggup mempunyai kunci hingga dengan 128 bit. Protokol keamanan SSL (Secure Socket Layer) pada Netscape Navigator memakai algoritma RC4 40-bit untuk enkripsi simetrisnya. 
Algoritma RC4 mempunyai dua fase, setup kunci dan pengenkripsian. Setup untuk kunci yakni fase pertama dan yang paling sulit dalam algoritma ini. Dalam setup Sbit kunci (S merupakan panjang dari kunci), kunci enkripsi dipakai untuk menghasilkan variabel enkripsi yang memakai dua buah array, state dan kunci, dan sejumlah-S hasil dari operasi penggabungan. Operasi penggabungan ini terdiri dari pemindahan (swapping) byte, operasi modulo, dan rumus lain. Operasi modulo merupakan proses yang menghasilkan nilai sisa dari satu pembagian. Sebagai contoh, 11 dibagi 4 yakni 2 dengan sisa pembagian 3, begitu juga jikalau tujuh modulo empat maka akan dihasilkan nilai tiga. 
Variabel enkripsi dihasikan dari setup kunci dimana kunci akan di XOR-kan dengan plain text untuk menghasilkan teks yang sudah terenkripsi. XOR merupakan operasi logik yang membandingkan dua bit biner. Jika bernilai beda maka akan dihasilkan nilai 1. Jika kedua bit sama maka risikonya yakni 0. Kemudian akseptor pesan akan mendekripnya dngan meng XOR-kan kembali dengan kunci yang sama biar dihasilkan pesan dari plain text tersebut. 
Untuk menandakan cara kerja dari algoritma RC4, berikut sanggup dilihat pada blok di bawah :

Gambar  Blok Diagram algortima RC 4 secara umum 

Gambar  Proses pembangkitan acak untuk kunci RC4 

RC4 memakai dua buah kotak substitusi (S-Box) array 256 byte yang berisi permutasi dari bilangan 0 hingga 255 dan S-Box kedua yang berisi permutasi fungsi dari kunci dengan panjang yang variabel. 
Cara kerja algoritma RC4 yaitu inisialisasi Sbox pertama, S[0],S[1],...,S[255], dengan bilangan 0 hingga 255. Pertama isi secara berurutan S[0] = 0, S[1] = 1,...,S[255] = 255. Kenudian inisialisasi array lain (S-Box lain), misal array K dengan panjang 256. Isi array K dengan kunci yang diulangi hingga seluruh array K[0], K[1],...,K[255] terisi seluruhnya. 

Proses inisialisasi S-Box (Array S) 
 For r = 0 to 255 S[r] = r 
Proses inisialisasi S-Box(Array K) 
Array Kunci // panjang kunci”length”. 
for i = 0 to 255 K[i] = Kunci[i mod length]
 Kemudian lakukan langkah pengacakan S-Box dengan langkah sebagai berikut : 
 j = 0 
 For i = 0 to 255 
 j = (j + S[i] + K[i]) mod 256 
 isi S[i] dan isi S[j] ditukar 
Dengan demikian berakhirlah proses persiapan kunci RC4. Untuk membangkitkan kunci enkripsi, dilakukan proses sebagai berikut: 
 i = j = 0 
 i = (i + 1) mod 256 
 j = (j + S[i]) mod 256 
 isi S[i] dan S[j] ditukar 
 k = S [ S[i] + S[j] ] mod 256 
 Perhatikan bahwa k kecil merupakan kunci yang pribadi beroperasi terhadap plainteks, sedangkan K besar yakni kunci utama atau kunci induk Bila terdapat plainteks P, maka operasi enkripsi berupa : C = P =+ k 
Sedangkan operasi dekripsi berupa : 
P = k =+ C 

 Kriptografi Modern (Simetrik RC4) 

Pembuatan Form Masukan PHP a. Gunakan kembali file di poin 3.
a. beri nama yang berbeda : awalrc4.php
Buat di PC Server, dan rubah hanya baris berikut : 

<form action="penkripsi.php" method="get">
Plainteks : <input type="text" name="kata"> <br>
Key : <input type="text" name="kcenkripsi" maxlength="16"> <br> 

catatan: NB : untuk kunci, dimasukkan kata tanpa spasi sebanyak 16 karakter.

Proses Pembentukan Kunci Enkripsi dengan RC4 Algorithm 
b. Buat file untuk memproses setupkey dan enkripsi RC4, beri nama file penkripsi.php 
c. Buat agenda untuk setupkey : 

function setupkey() //proses pengacakan kunci di SBox
{
echo "<br>";
$kce = $_GET["kcenkripsi"];
echo "Kunci enkripsi = $kce";
echo "<br>";
 for($i=0;$i<strlen($kce);$i++)
 {
 $key[$i]=ord($kce[$i]); //rubah ASCII ke desimal
 }
 global $m;
 $m=array();
 // buat encrpyt
 for($i=0;$i<256;$i++){
 $m[$i] = $i;
}
 $j = $k = 0;
 for($i=0;$i<256;$i++)
 {
 $a = $m[$i];
 $j = ($j + $m[$i] + $key[$k]) % 256;
 $m[$i] = $m[$j];
 $m[$j] = $a;
 $k++;
 if($k>15)
 {
 $k=0;
 }
 }
} //akhir function

Proses Enkripsi Algoritma RC4 

d. Tambahkan agenda untuk enkripsi RC4 dibawah fungsi setupkey
 function crypt2($inp)
{
 global $m;
 $x=0;$y=0;
 $bb='';
 $x = ($x+1) % 256;
 $a = $m[$x];
 $y = ($y+$a) % 256;
 $m[$x] = $b = $m[$y];
 $m[$y] = $a;
 //proses XOR antara plaintext dengan kunci
 //dengan $inp sebagai plaintext
 //dan $m sebagai kunci
 $bb= ($inp^$m[($a+$b) % 256]) % 256;
 return $bb;
}

e. Tampilkan kalimat orisinil dan hasil enkripsi RC4 
 $kalimat = $_GET["kata"]; 
setupkey();
 for($i=0;$i<strlen($kalimat);$i++)
 {
 $kode[$i]=ord($kalimat[$i]); //rubah ASCII ke desimal
 $b[$i]=crypt2($kode[$i]); //proses enkripsi RC4
 $c[$i]=chr($b[$i]); //rubah desimal ke ASCII
 }
 echo "kalimat ASLI : ";
 for($i=0;$i<strlen($kalimat);$i++)
 {
 echo $kalimat[$i];
 }
 echo "<br>";
 echo "hasil enkripsi =";
 $hsl = '';
 for ($i=0;$i<strlen($kalimat);$i++)
 {
 echo $c[$i];
 $hsl = $hsl . $c[$i];
 }
 echo "<br>";
 //simpan data di file
 $fp = fopen ("enkripsirc4.txt","w");
 fputs ($fp,$hsl);
 fclose($fp); 

Tes Proses Enkripsi 

f. Buka web browser dari PC Client dan akseslah file php dari PC Server http:///awalrc4.php 
g. Catat hasil enkripsi diatas

Pembuatan Form untuk proses dekripsi

h. Gunakan kembali file di 3.e. dan rubah beberapa baris berikut : Buat file untuk masukan key (berupa bilangan), biar bisa menghasilkan kembali plainteks maka key harus sama dengan proses enkripsi, beri nama file: akhirrc4.php di PC Server 
<form action="pdekripsi.php" method="get">
Key : <input type="text" name="kcdekripsi" maxlength="16"> <br> 

catatan: agar bisa menghasilkan kembali plainteks maka key harus sama dengan proses enkripsi

 Proses Pembentukan Kunci Dekripsi dengan RC4 Algorithm 

i. Buat file untuk memproses setupkey dan enkripsi RC4, beri nama file pdekripsi.php j. Buat agenda untuk setupkey (proses ini sama dengan proses pembentukan kunci untuk enkripsi) :

function setupkey()
{
 $kcd = $_GET["kcdekripsi"];
 echo "Kunci Dekripsi = $kcd";
 echo "<br>";
 for($i=0;$i<strlen($kcd);$i++)
 {
 $key[$i]=ord($kcd[$i]); //rubah ASCII ke desimal
 }
 global $mm;
 $mm=array();
 // buat decrpyt
 $mm=array();
 for($i=0;$i<256;$i++)
 $mm[$i] = $i;
 $j = $k = 0;
 for($i=0;$i<256;$i++)
 {
 $a = $mm[$i];
 $j = ($j + $a + $key[$k]) % 256;
 $mm[$i] = $mm[$j];
 $mm[$j] = $a;
 $k++;
 if($k>15)
 {
 $k=0;
 }
 }
} //akhir function 

Proses Dekripsi Algoritma RC4 

k. Tambahkan agenda untuk dekripsi RC4 dibawah fungsi setupkey : 
function decrypt2($inp)
{
 global $mm;
 $xx=0;$yy=0;
 $bb='';
 $xx = ($xx+1) % 256;
 $a = $mm[$xx];
 $yy = ($yy+$a) % 256;
 $mm[$xx] = $b = $mm[$yy];
 $mm[$yy] = $a;
 //proses XOR antara ciphertext dengan kunci
 //dengan $inp sebagai ciphertext
 //dan $m sebagai kunci
 $bb = ($inp^$mm[($a+$b) % 256]) % 256;
 return $bb;
}

l. Tampilkan hasil dekripsi RC4

 setupkey();
 $nmfile = "enkripsirc4.txt";
//ambil data dari file enkripsirc4.txt
 $fp = fopen($nmfile,"r");
 $isi = fread($fp,filesize($nmfile));
 echo "Ciphertext : $isi"."<br>";
 for($i=0;$i<strlen($isi);$i++)
 {
 $b[$i]=ord($isi[$i]); // rubah ASCII ke desimal
 $d[$i]=decrypt2($b[$i]); // proses dekripsi RC4
 $s[$i]=chr($d[$i]); // rubah desimal ke ASCII
 }

 echo "hasil dekripsi = ";
 for ($i=0;$i<strlen($isi);$i++)
 {
 echo $s[$i];
 }
 echo "<br>"; 

Tes Proses Dekripsi 
m. Buka web browser dari PC Client dan akseslah file php dari PC Server http:///akhirrc4.php 
n. Catat hasil dekripsi diatas. 
o. Ubah-ubahlah nilai key, dan catat hasilnya. 
p. Ulangi proses 4.f dan masukkan kata yang sama dan berulang-ulang. Setelah itu analisa hasilnya.