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