langkah yang perlu untuk dilakukan meliputi
- membangkitkan kuncil public dan private RSA
- melakukan enkripsi
- melakukan deskripsi
membangkitkan kunci RSA
<?php
echo "Membentuk kunci RSA";
//untuk membuat kunci yang lebih panjang coba gmp_random
//$rand1 = gmp_random(1); // mengeluarkan random number dari 0 sampai 1 x limb
//$rand2 = gmp_random(1); // mengeluarkan random number dari 0 sampai 1 x limb
//mencari bilangan random
$rand1=rand(100,200);
$rand2=rand(100,200);
// mencari bilangan prima selanjutnya dari $rand1 &rand2
$p = gmp_nextprime($rand1);
$q = gmp_nextprime($rand2);
//menghitung&menampilkan n=p*q
$n=gmp_mul($p,$q);
//menghitung&menampilkan totient/phi=(p-1)(q-1)
$totient=gmp_mul(gmp_sub($p,1),gmp_sub($q,1));
//mencari e, dimana e merupakan coprime dari totient
//e dikatakan coprime dari totient jika gcd/fpb dari e dan totient/phi = 1
for($e=2;$e<100;$e++){ //mencoba perulangan max 100 kali,
$gcd = gmp_gcd($e, $totient);
if(gmp_strval($gcd)=='1')
break;
}
//cari d dengan syarat
// d.e mod totient =1
// d.e = totient*x + 1
// d.e = totient*1 + 1
// d = (totient *1 + 1)/e
//menghitung nilai d
$i=1;
do{
$res = gmp_div_qr(gmp_add(gmp_mul($totient,$i),1), $e);
$i++;
if($i==10000) //maksimal percobaan 10000
break;
}while(gmp_strval($res[1])!='0');
$d=$res[0];
$n =gmp_strval($n); //nilai n
$e =gmp_strval($e); //nilai e [enkripsi]
$d =gmp_strval($d); //nilai d [deskripsi]
?>
langkah kedua melakukan enkripsi
<?php
if(!empty($_POST['enkrip'])){
$n=$_POST['n'];
$e=$_POST['e'];
$teks=$_POST['teks'];
//pesan dikodekan menjadi kode ascii, kemudian di enkripsi per karakter
for($i=0;$i<strlen($teks);++$i){
//rumus enkripsi <enkripsi>=<pesan>^<e>mod<n>
$hasil.=gmp_strval(gmp_mod(gmp_pow(ord($teks[$i]),$e),$n));
//antar tiap karakter dipisahkan dengan "."
if($i!=strlen($teks)-1){
$hasil.=".";
}
}
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Enkripsi rsa</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<?php
if($hasil){
echo "<textarea id=\"hasil\">".$hasil."</textarea>";
}
?>
<form id="enkripsi" name="enkripsi" method="post">
<textarea name="teks" id="teks"></textarea>
<label for="n">n (desimal)=</label><input type="text" name="n" id="n" size="30" value="" />
<label for="e">e (desimal)=</label><input type="text" name="e" id="e" size="10" value="" />
<input type="submit" name="enkrip" id="enkrip" value="enkrip"/>
</form>
</body>
</html>
kemudian kalau ingin mengembalikan pesan yang telah terenkrip tadi gunakan file berikut ini :<?php
if(!empty($_POST['dekrip'])){
$time_start = microtime(true);//menghitung waktu awal eksekusi
$n=$_POST['n'];
$d=$_POST['d'];
//pesan enkripsi dipecah menjadi array dengan batasan "."
$teks=explode(".",$_POST['teks']);
foreach($teks as $nilai){
//rumus enkripsi <pesan>=<enkripsi>^<d>mod<n>
$hasil.=chr(gmp_strval(gmp_mod(gmp_pow($nilai,$d),$n)));
}
$time_end = microtime(true); //menghitung waktu akhir eksekusi dekripsi
$time = $time_end - $time_start; //total waktu untuk dekripsi
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Proses Dekripsi rsa</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<h2>membutuhkan waktu <?php echo $time; ?> untuk dekripsi</h2>
<?php
if($hasil){
echo "<textarea id=\"hasil\">".$hasil."</textarea>";
}
?>
<form id="enkripsi" name="enkripsi" method="post">
<textarea name="teks" id="teks"></textarea>
<label for="n">n (desimal)=</label><input type="text" name="n" id="n" size="30" value="" />
<label for="d">d (desimal)=</label><input type="text" name="d" id="d" size="10" value="" />
<input type="submit" name="dekrip" id="dekrip" value="dekrip"/>
</form>
</body>
</html>
Semoga Bermanfaat Ach Khozaimi #kuliah
bang cara jalaninnya gmna?
ReplyDeletejalankan satu-satu, mulai dari yang atas. :-)
ReplyDeletemas kalau muncul pesan Fatal error: Call to undefined function gmp_mul() in C:\xampp\htdocs\project\bayu\process\doencrypt.php on line 17.
ReplyDeleteitu kenapa ya?
mas kalau muncul message Fatal error: Call to undefined function gmp_mul() in C:\xampp\htdocs\project\bayu\process\doencrypt.php on line 17.
ReplyDeleteitu kenapa ya?
silakan buka file php.ini pada apache anda, kemudian cari ;extension=php_gmp.dll , buang tanda titik koma yang ada di depannya.
ReplyDelete