Chiper Subtitusi Homofonik, Menggunakan Bahasa Pemrograman PHP + Ajax

Seperti biasanya mahasiswa, dapet tugas dari dosen. Kebetulan matakuliah Kriptografi dengam materi subtitusi homofonik.

Namun kode ini masih kurang sempurna. Secara fungsionalitas si, udah berjalan baik di laptop saya. Tapi secara tampilan masih belum sempurna. Yaa, monggo bagi yang berminat silakan di utek-utek sendiri.

Sebenarnya saya juga berhasil dari hasil utek-utek berbagai sumber (akan disebutkan beberapa sumbernya nanti :D )

Oke langsung aja.

1. Pertama kita bikin dulu form, untuk input plaintext yang akan di enkripsi. Pada file ini saya beri nama "index.php". Berikut kode sumbernya :
<html>
<head>
<script type="text/javascript">
function dekripsi(str)
{
if (str.length==0)
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","dekripsiteks.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>

<p><b>Masukkan Teks Yang akan di Dekripsi:</b></p>
<form>
First name: <input type="text" onkeyup="dekripsi(this.value)" size="20" />
</form>
<p>Hasil Dekripsi (Plainteks) : <span id="txtHint"></span></p>

</body> 
</html>


2. Baru kita bikin fungsi untuk melakukan enkripsi dari teks yang sudah kita input-kan pada form diatas. Kali ini saya beri nama "enkripsiteks.php". Berikut kode sumbernya :
<?php
$tabel = array("A"=>array("BU","CP","AV","AH","BT","BS","CQ"),
"B"=>array("AT"),
"C"=>array("DL","BK","AU"),
"D"=>array("BV", "DY", "DM", "AI"),
"E"=>array("DK", "CO", "AW", "BL","AA", "CR", "BM", "CS","AF", "AG", "BO","BN", "BE"),
"F"=>array("BW","CM","CN"),
"G"=>array("DN","BJ"),
"H"=>array("AS","CL","CK"),
"I"=>array("DJ","BI","AX","CJ","AB","BP","CU","CT"),
"J"=>array("BX"),
"K"=>array("DI"),
"L"=>array("AR", "BH", "CI", "AJ"),
"M"=>array("DH", "BG", "AY"),
"N"=>array("BY","DG","DF","CH","AC","BR","DU","DT"),
"O"=>array("DZ","BF","DX","AK","CG","BQ","DR"),
"P"=>array("BZ", "DE", "AZ"),
"Q"=>array("DD"),
"R"=>array("AQ","DC","DQ","AL","CE","CF","CV","DS"),
"S"=>array("AP","AN","AO","CD","DW","DV"),
"T"=>array("CB","DB","DP","CC","AD","CY","CW","CX","AE"),
"U"=>array("CA","AM","BA"),
"V"=>array("BB"),
"W"=>array("CZ"),
"X"=>array("BD"),
"Y"=>array("DO", "DA"),
"Z"=>array("BC"));
               
                $teks = $_GET['q'];
                $teks = str_ireplace(' ','',$teks);
/** Rubah semua huruf menjadi huruf kapital */
                $teks = strtoupper($teks);
/** Ambil jumlah huruf untuk pencacah */
                $len = strlen($teks);
/** Ambil peta plainteks ke chiperteks pada tabel */
                $chiper = '';

for($i=0;$i<$len;$i++){
                /** Cek apakah huruf plainteks ada pada tabel ? */
                if(array_key_exists($teks[$i], $tabel)){
                                /** Hitung jumlah kemungkinan chiperteks pada huruf*/
                                $c = count($tabel[$teks[$i]]);
                                /** Ambil salah satu chiperteks dari huruf plainteks */
                                $chiper .= $tabel[$teks[$i]][rand(0,$c-1)];
                }
}

echo "$chiper";
?>


3. Ada gula ada semut. Ada enkripsi berarti ada dekripsi-nya juga. hehehe (ga nyambung). 
Saatnya kita bermain-main di kode dekripsi. Kali ini saya beri nama "index2.php". File ini berisi form inputan chipertext yang akan di dekripsi. Cekidot :
<html>
<head>
<script type="text/javascript">
function dekripsi(str)
{
if (str.length==0)
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","dekripsiteks.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>

<p><b>Masukkan Teks Yang akan di Dekripsi:</b></p>
<form>
First name: <input type="text" onkeyup="dekripsi(this.value)" size="20" />
</form>
<p>Hasil Dekripsi (Plainteks) : <span id="txtHint"></span></p>

</body>
</html>

4. Barulah kita bikin fungsi dari dekripsi teks, yang sudah di-inputkan di atas. Kali ini file saya beri nama "dekripsiteks.php"


<?php
$tabel = array("A"=>array("BU","CP","AV","AH","BT","BS","CQ"),
"B"=>array("AT"),
"C"=>array("DL","BK","AU"),
"D"=>array("BV", "DY", "DM", "AI"),
"E"=>array("DK", "CO", "AW", "BL","AA", "CR", "BM", "CS","AF", "AG", "BO","BN", "BE"),
"F"=>array("BW","CM","CN"),
"G"=>array("DN","BJ"),
"H"=>array("AS","CL","CK"),
"I"=>array("DJ","BI","AX","CJ","AB","BP","CU","CT"),
"J"=>array("BX"),
"K"=>array("DI"),
"L"=>array("AR", "BH", "CI", "AJ"),
"M"=>array("DH", "BG", "AY"),
"N"=>array("BY","DG","DF","CH","AC","BR","DU","DT"),
"O"=>array("DZ","BF","DX","AK","CG","BQ","DR"),
"P"=>array("BZ", "DE", "AZ"),
"Q"=>array("DD"),
"R"=>array("AQ","DC","DQ","AL","CE","CF","CV","DS"),
"S"=>array("AP","AN","AO","CD","DW","DV"),
"T"=>array("CB","DB","DP","CC","AD","CY","CW","CX","AE"),
"U"=>array("CA","AM","BA"),
"V"=>array("BB"),
"W"=>array("CZ"),
"X"=>array("BD"),
"Y"=>array("DO", "DA"),
"Z"=>array("BC"));

$chipertext = $_GET['q'];
$len = strlen($chipertext);
/** Jika chiperteks berjumlah genap, maka dapat dilakukan dekripsi pada chiperteks */
if($len%2==0){
                /** plaintext awal bernilai null */
                $plaintext = '';
                $i=0;
                while($i<$len){
                                foreach($tabel as $tab=>$tabs){
                                                /** jika setiap 2 chipertext ada nilai-nya dalam tabel, maka nilai tersebut diberikan ke variable $plaintext */
                                                if(in_array($chipertext[$i].$chipertext[$i+1], $tabel[$tab])){$plaintext .= $tab;}
                                }
                                $i+=2;
                }
}
/** Jika chiperteks tidak berjumlah genap berarti chiperteks tidak dapat di dekripsi */
else{
                $plaintext = 'Periksa kembali Chipertext-nya';
}

                echo "$plaintext"; 
?>


Untuk yang mau ngotak-ngatik, bisa dicoba untuk form inputan teks (baik dekripsi atau enkripsi) berada pada satu halaman. Lalu terdapat 2 tombol submit, yaitu tombol "enkripsi" dan tombol "dekripsi". So, tentu saja masing2 tombol mengarahkan ke fungsi yang berbeda.

Selamat mencoba, semoga bermanfaat.

Jazakumullohu Khoiro.
barokallohu fiikum.

Wassalam.

Referensi :

http://satupersen.blogspot.com/2012/08/substitusi-homofon-dengan-php.html
http://www.w3schools.com/php/

Komentar

  1. mas boleh minta source code untuk program diatas? kirim ke nandadheanti@gmail.com
    makasi mas

    BalasHapus

Posting Komentar

Postingan populer dari blog ini

33 Rahasia Ayah yang Harus Kita Ketahui

Jam 5 tepat

Mahira dan Sayangnya Bunda