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">&nbsp;<?=
$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">&nbsp;<?=
$msg_q_noprima;?></td> </tr> <tr>
<td>&nbsp;</td><td>&nbsp;&nbsp;<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>&nbsp;</td><td>&nbsp;&nbsp;<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>&nbsp;</td><td>&nbsp;&nbsp;<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>&nbsp;</td><td>&nbsp;&nbsp;<input type="submit" name="submit" value="Submit"></td> </tr> </form> </table> <br> <br>
VERIFIKASI: <?echo $verify;?> <br>