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';
$t1 = bcsub($u1, bcmul($qq, $v1)); $t2 = bcsub($u2, bcmul($qq, $v2)); $t3 = bcsub($u3, bcmul($qq, $v3)); $u1 = $v1;
$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;
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.' ';
}
}
/*
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) {
}
}
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'])){ }
<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>
echo"<i>Keys:</i><br />";
$keys = $RSA->generate_keys ($p, $q, 1);
?> <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'])) {
$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>
<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>
<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>
<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);
$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>
<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
<?
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..
}
//$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>
</textarea> </td>
</tr> <tr>
<td> </td><td> <input type="submit" name="submit" value="Submit"></td>
</tr> </form> </table> <br> <br>