LAMPIRAN A: Listing Program

  Siregar, 2011. Perbandingan Algoritma Rsa Dan Triple Des Dalam Proses Enkripsi Dan Dekripsi File Teks . Medan: Universitas Sumatera Utara

  Widanarto, P. 2005. Analisis Collision Pada Enkripsi MD5. Institut Teknologi Bandung.

LAMPIRAN A: Listing Program

  //NAMA FILE : rsa.class.php <? class RSA{ public function generate_keys ($p, $q, $show_debug=0){

  $n = bcmul($p, $q); //m (hitung D dan E) $m = bcmul(bcsub($p, 1), bcsub($q, 1)); // Public key E $e = $this->findE($m); // Private key D $d = $this->extend($e,$m); $keys = array ($n, $e, $d); if ($show_debug) { echo "P = $p<br>Q = $q<br><b>N = $n</b> - modulo<br>M = $m<br><b>E = $e</b> - public key<br><b>D = $d</b> - private key<p>";

  } return $keys; } private function extend ($Ee,$Em) {

  $u1 = '1'; $u2 = '0'; $u3 = $Em; $v1 = '0'; $v2 = '1'; $v3 = $Ee; while (bccomp($v3, 0) != 0) {

  $qq = bcdiv($u3, $v3, 0); $t1 = bcsub($u1, bcmul($qq, $v1)); $t2 = bcsub($u2, bcmul($qq, $v2)); $t3 = bcsub($u3, bcmul($qq, $v3)); $u1 = $v1; $u2 = $v2; $u3 = $v3; $v1 = $t1; $v2 = $t2; $v3 = $t3; $z = '1';

  } $uu = $u1; $vv = $u2; if (bccomp($vv, 0) == -1) {

  $inverse = bcadd($vv, $Em); } else {

  $inverse = $vv; } return $inverse;

  } private function GCD($e,$m) { $y = $e; $x = $m; while (bccomp($y, 0) != 0) {

  // modulus function $w = bcsub($x, bcmul($y, bcdiv($x, $y, 0)));;

  $x = $y; $y = $w;

  } return $x; } private function findE($m){

  $e = '3'; if(bccomp($this->GCD($e, $m), '1') != 0){ $e = '5'; $step = '2'; while(bccomp($this->GCD($e, $m), '1') != 0){

  $e = bcadd($e, $step); if($step == '2'){ $step = '4';

  }else{ $step = '2';

  } }

  } return $e; } /*

  • ENCRYPT function returns
  • X = M^E (mod N)
  • / public function encrypt ($m, $e, $n, $s=3) {

  $coded = ''; $max = strlen($m); $packets = ceil($max/$s); for($i=0; $i<$packets; $i++){

  $packet = substr($m, $i*$s, $s); $code = '0'; for($j=0; $j<$s; $j++){

  $code = bcadd($code, bcmul(ord($packet[$j]), bcpow('256',$j))); } $code = bcpowmod($code, $e, $n); $coded .= $code.' ';

  } return trim($coded);

  } /* ENCRYPT function returns M = X^D (mod N)

  • / public function decrypt ($c, $d, $n) {

  $coded = split(' ', $c); $message = ''; $max = count($coded); for($i=0; $i<$max; $i++){

  $code = bcpowmod($coded[$i], $d, $n); while(bccomp($code, '0') != 0){ $ascii = bcmod($code, '256'); $code = bcdiv($code, '256', 0); $message .= chr($ascii);

  } } return $message;

  } // Digital Signature public function sign($message, $d, $n){

  $messageDigest = md5($message); $signature = $this->encrypt($messageDigest, $d, $n, 3); return $signature;

  } public function prove($message, $signature, $e, $n){ $messageDigest = $this->decrypt($signature, $e, $n); if($messageDigest == md5($message)){ return true;

  }else{ return false; }

  } public function signFile($file, $d, $n){ $messageDigest = md5_file($file); $signature = $this->encrypt($messageDigest, $d, $n, 3); return $signature;

  } public function proveFile($file, $signature, $e, $n){ $messageDigest = $this->decrypt($signature, $e, $n); if($messageDigest == md5_file($file)){ return true;

  }else{ return false; }

  } } ?> //NAMA FILE: sieve.php <?php ini_set('max_execution_time', 300); ini_set('memory_limit', '-1'); function sieve($n) { $limit = intval(sqrt($n)); $A = array_fill(0, $n, true); for ($i = 2; $i <= $limit; $i++) { if ($A[$i - 1]) { for ($j = $i * $i; $j <= $n; $j += $i) { $A[$j - 1] = false; } } } $result = array(); foreach ($A as $i => $is_prime) { if ($is_prime) { $result[] = $i + 1;

  } } return $result; } ?> //NAMA FILE: kunci.php <? session_start(); //cek apakah user sudah login if(!isset($_SESSION['userid'])){ echo "<script>alert('anda belum login') location.replace('index.php')</script>";//jika belum login jangan lanjut.. } ?> <? include('koneksi.php'); $userid=$_SESSION['userid']; $query = "SELECT * FROM kunci WHERE userid='$userid' "; $result = mysql_query($query) or die(mysql_error()); if (mysql_num_rows($result)==0 ) { if(isset($_POST['submitpq'])){ include("sieve.php"); $input = sieve(1000000); $rand_keys = array_rand($input, 2); //if(isset($_POST['submitted'])){ } ?> <html> <head>

  <title>Algoritma RSA</title> </head> <body>

  <table border="0" cellspacing="0" cellpadding="2"> <form action="<? $PHPSELF;?>" method="post">

  <tr> <td width="12%">Masukkan p</td> <td width="25%">: <input type="text" name="p" value="<?=$input[$rand_keys[1]];?>" ></td> <td colspan="2"> <?=

  $msg_p_noprima;?></td> </tr> <tr>

  <td>Masukkan q</td> <td>: <input type="text" name="q" value="<?=$input[$rand_keys[0]];?>" ></td> <td colspan="2"> <?=

  $msg_q_noprima;?></td> </tr> <tr>

  <td> </td><td>  <input type="submit" name="submitpq" value="Generate P dan Q"></td> <td><input type="submit" name="buatkunci" value="Generate Key"></td>

  </tr> </form>

  </table> <?php if(isset($_POST['buatkunci'])){

  $p=$_POST['p']; $q=$_POST['q']; include('rsa.class.php'); $RSA = new RSA(); /* Example */ echo"<i>Keys:</i><br />"; $keys = $RSA->generate_keys ($p, $q, 1); ?>

  <br> Kunci Publik (<? echo $keys[1]." , ".$keys[0] ?>) <br> Kunci Private (<? echo $keys[2]." , ".$keys[0] ?>) <br>

  <?}?> <form action='index.php?page=simpankunci' method='POST'> <input type='hidden' name='userid' value='<?=$_SESSION['userid'];?>'/> <input type='hidden' name='n' value='<?=$keys[0];?>'/> <input type='hidden' name='e' value='<?=$keys[2];?>' /> <input type='hidden' name='d' value='<?=$keys[1];?>'/> <p><input type='submit' value='Simpan Kunci' /><input type='hidden' value='1' name='submitted' /> </form> </body> </html> <? } else { echo " Anda telah membuat Pasangan Kunci"; echo "<br><br><a href=\"index.php?page=hapuskunci&id=$userid\">HAPUS PASANGAN KUNCI LAMA</a>"; } //NAMA FILE: compose.php <? session_start(); include('koneksi.php'); //cek apakah user sudah login if(!isset($_SESSION['userid'])){ echo "<script>alert('anda belum login') location.replace('index.php')</script>";//jika belum login jangan lanjut.. } if (isset($_POST['sig'])) { $userid=$_SESSION['userid'];

  $result = mysql_query("SELECT n,e FROM kunci WHERE userid='$userid'"); if (!$result) { echo 'Could not run query: ' . mysql_error(); exit;

  } $row = mysql_fetch_row($result); $n=$row[0]; $e=$row[1]; include('rsa.class.php'); $RSA = new RSA(); $message=$_POST['message']; $signature = $RSA->sign($message, $e, $n); ?> <form action="index.php?page=kirim" method="post" class="niceform">

  <fieldset> <dl>

  <dt><label for="email">To:</label></dt> <dd><input type="hidden" name="to" id="" size="54" value="<?=$_POST['to'];?>"/><?=$_POST['to'];?></dd>

  </dl> <dl>

  <dt><label for="password">Subject:</label></dt> <dd><input type="hidden" name="subject" id="" size="54" value="<?=$_POST['subject'];?>"

  /><?=$_POST['subject'];?></dd> </dl>

  <dl> <dt><label for="comments">Isi E-

  Mail</label></dt> <dd><input type="hidden" name="isiemail" value="<?=$_POST['message'];?>"><?=$_POST['message'];?></dd>

  </dl> <dl>

  <dt><label for="comments">Signature</label></dt>

  <dd><input type="hidden" name="signature" value="<?=$signature;?>"><?=$signature;?></dd> <input type="hidden" name="userid" value="<?=$_SESSION['userid'];?>">

  </dl> <dl class="submit">

  <input type="submit" name="submit" id="submit" value="Submit" /> </dl>

  <dl class="submit"> <input type="submit" name="batal" id="batal" value="Batal" />

  </dl> </fieldset>

  </form> <? } elseif (isset($_POST['submit'])) { echo $_POST['subject']; } else{ ?>

  <form action="" method="post" class="niceform"> <fieldset>

  <dl> <dt><label for="email">To:</label></dt> <dd><input type="text" name="to" id="" size="54" /></dd>

  </dl> <dl>

  <dt><label for="password">Subject:</label></dt> <dd><input type="text" name="subject" id="" size="54" /></dd>

  </dl> <dl>

  <dt><label for="comments">Isi E- Mail</label></dt>

  <dd><textarea name="message" id="comments" rows="5" cols="36"></textarea></dd> </dl>

  <dl class="submit"> <input type="submit" name="submit" id="submit" value="Submit" />

  </dl> <dl class="submit">

  <input type="submit" name="sig" id="sig" value="Tambahkan Signature" /> </dl>

  </fieldset> </form>

  <?}?> //NAMA FILE: sign.php <? session_start(); include('koneksi.php'); //cek apakah user sudah login if(!isset($_SESSION['userid'])){ echo "<script>alert('anda belum login') location.replace('index.php')</script>";//jika belum login jangan lanjut.. } if(isset($_POST['submit'])){ include('rsa.class.php'); $RSA = new RSA(); $message=$_POST['pesan']; $n=$_POST['n']; $e=$_POST['e']; $hash=md5($message); $signature = $RSA->sign($message, $e, $n); } ?> <table align="left" border="0" cellspacing="0" cellpadding="2"> <form action="<? $PHPSELF;?>" method="post"> <tr> <td width="12%">e</td> <td width="25%">: <input type="text" name="e" ></td> </tr> <tr> <td>n</td> <td>: <input type="text" name="n" ></td> </tr> <tr> <td>Pesan</td> <td>

  <textarea name="pesan" rows="5" cols="25" > </textarea>

  </td> </tr> <tr>

  <td> </td><td>  <input type="submit" name="submit" value="Submit"></td> </tr> </form> </table> <br> <br> <br> MESSAGE DIGEST: <?=$hash;?>

  <br> <br> SIGNATURE: <?echo $signature;?> <br> //NAMA FILE: verifikasi.php <? session_start(); include('koneksi.php'); include('rsa.class.php'); //cek apakah user sudah login if(!isset($_SESSION['userid'])){ echo "<script>alert('anda belum login') location.replace('index.php')</script>";//jika belum login jangan lanjut.. } $userid=$_SESSION['userid']; $RSA = new RSA(); if (isset($_POST['submit'])) { $pesan="$_POST[pesan]"; $pesan=trim($pesan); $sig="$_POST[sig]"; $sig=trim($sig); $n="$_POST[n]"; $d="$_POST[d]"; $verify=($RSA->prove($pesan, $sig, $d, $n)? "Benar" : "Salah"); } $id=$_GET['id']; $result = mysql_query("SELECT n,d FROM `kunci` where userid='$userid' ") or trigger_error(mysql_error()); $row = mysql_fetch_array($result); $n=$row['0']; $d=$row['1'];

  $result = mysql_query("SELECT * FROM `pesan` where idpesan='$id' ") or trigger_error(mysql_error()); $row2 = mysql_fetch_array($result); ?> <table align="left" border="0" cellspacing="0" cellpadding="2"> <form action="<? $PHPSELF;?>" method="post"> <tr> <td width="12%">D</td> <td width="25%">: <input type="text" name="d" value="<?=$d;?>" ></td> </tr> <tr> <td>N</td> <td>: <input type="text" name="n" value="<?=$n;?>"></td> </tr> <tr> <td>Pesan</td> <td>

  <textarea name="pesan" rows="5" cols="25" ><?=$row2['4'];?> </textarea>

  </td> </tr> <tr> <td>Signature</td> <td>

  <textarea name="sig" rows="5" cols="25" ><?=$row2['5'];?> </textarea>

  </td> </tr> <tr>

  <td> </td><td>  <input type="submit" name="submit" value="Submit"></td> </tr> </form> </table> <br>

  VERIFIKASI: <?echo $verify;?> <br> //NAMA FILE: verify.php <? session_start(); include('koneksi.php'); //cek apakah user sudah login if(!isset($_SESSION['userid'])){ echo "<script>alert('anda belum login') location.replace('index.php')</script>";//jika belum login jangan lanjut.. } include('rsa.class.php'); if(isset($_POST['submit'])){ $RSA = new RSA() $pesan="$_POST[pesan]"; $sig="$_POST[sig]"; $sig=trim($sig); $n="$_POST[n]"; $d="$_POST[d]"; //$signature = $RSA->sign($message, $e, $n); $verify=($RSA->prove($pesan, $sig, $d, $n)? "Benar" : "Salah"); } ?> <table align="left" border="0" cellspacing="0" cellpadding="2"> <form action="<? $PHPSELF;?>" method="post"> <tr> <td width="12%">d</td> <td width="25%">: <input type="text" name="d" value='<?=$d;?>' ></td> </tr> <tr> <td>n</td> <td>: <input type="text" name="n" value='<?=$n;?>' ></td> </tr> <tr> <td>Pesan</td> <td>

  <textarea name="pesan" rows="5" cols="25" ><?=$pesan;?> </textarea>

  </td> </tr> <tr> <td>Signature</td> <td>

  <textarea name="sig" rows="5" cols="25" ><?=$sig;?>

  </textarea> </td> </tr> <tr>

  <td> </td><td>  <input type="submit" name="submit" value="Submit"></td> </tr> </form> </table> <br> <br>

  VERIFIKASI: <?echo $verify;?> <br>