Kaskus

Tech

miptaAvatar border
TS
mipta
newbie Kriptgrafi Modern (RSA)
Hal yang harus agan perhatikan tentang kriptografi RSA itu sangatlah mudah dibanding kriptografi modern lainnya. okey langsung saja keTKP
terlebih dahulu kita beri simbol supaya tidak pusingemoticon-Cape d... (S)
C = Me mod n ( fungsi enkripsi )
M = Cd mod n (fungsi dekripsi)
C = Cipherteks
M = Message / Plainteks
e = kunci publik
d= kunci privat
n = modulo pembagi(akan dijelaskan lebih lanjut )
Kedua pihak harus mengetahui nilai e dan nilai n ini, dan salah satu pihak harus memilki d untuk melakukan dekripsi terhadap hasil enkripsi dengan menggunakan public key e. Penggunaan algoritma ini harus memenuhi kriteria berikut :
1. Memungkinkan untuk mencari nilai e, d, n sedemikian rupa sehingga Med mod n = M untuk semua M < n.
2. Relatif mudah untuk menghitung nilai Me mod n dan Cd mod n untuk semua nilai M < n.
3. Tidak memungkinkan mencari nilai d jika diberikan nilai n dan e.
Syarat nilai e dan d ini, gcd(d,e)=1 sebelum memulai penggunaan RSA ini, terlebih dahulu kita harus memiliki bahan – bahan dasar sebagai berikut :
1. p, q = 2 bilangan prima yang dirahasiakan
2. n, dari hasil p.q
3. e, dengan ketentuan gcd (Φ(n), e) =1
4. d, e-1 (mod Φ(n))
Saya akan berikan satu contoh :
1. Pilih 2 bilangan prima, misalnya p = 17 dan q = 11.
2. Hitung n = pq = 17 × 11 = 187.
3. Hitung Φ(n) = (p – 1)(q – 1) = 16 × 10 = 160.
4. Pilih nilai e sedemikian sehingga relatif prima terhadap Φ(n) = 160 dan kurang dari Φ(n); kita pilih e = 7.
5. Hitung d sedemikian sehingga de ≡ 1 (mod 160) dan d < 160.Nilai yang didapatkan d = 23,karena 23 × 7 = 161 = (1 × 160) + 1; d dapat dihitung dengan Extended Euclidean Algorithm.

Nah, nilai e dan d inilah yang kita sebut sebagai Public Key(e) dan Private Key(d). Pasangan Kunci Publiknya ={7,187} dan Kunci Privatnya = {23, 187} Sekarang kita aplikasikan dalam proses enkripsi.
Misalnya kita punya M 88. Untuk proses enkripsi, kita akan menghitung C = 887 mod 187.
= 887 mod 187.
=894,432 mod 187
=11
Nah, kita mendapatkan nilai C =11.
Selanjutnya, nilai C ini dikirimkan kepada penerima untuk didekripsi dengan kunci privat miliknya.
M = Cd mod n
= 1123 mod 187
=79,720,245 mod187
= 88
semoga bisa dimengerti yah. . . .emoticon-Ngakak
klu agan mau mengimplementasikannya ane punya script nya tapi dalam php
pertama buat file estensi php dengan nama sembarang.php kemudian copy saja nih script
<?php
set_time_limit(0); // menghindari limit max_execution_time sewaktu run/submit
include("sembarang2.php");
$p = $_POST['p']; $q = $_POST['q']; $plainteks = $_POST['plainteks'];
if($_POST['submit']) {
if(!cek_prima($p)) {
$msg_p_noprima = "'$p' bukan bilangan prima"; $p = "";
} elseif(!cek_prima($q)) {
$msg_q_noprima = "'$q' bukan bilangan prima"; $q = "";
} elseif($plainteks=="") {
$msg_null = "Plainteks tidak boleh kosong";
} else {
// cari nilai n, totient, e, d
$n = $p * $q;
$totient = ($p - 1) * ($q - 1);
$e = cari_e($totient);
$d = cari_d($e, $totient);
// encrypt, decrypt
$enkripsi = encode($plainteks, $e, $n);
$dekripsi = decode($enkripsi, $d, $n);
if($dekripsi == $plainteks) {
$msg_dekripsi = "Kesimpulan: Benar";
} else {
$msg_dekripsi = "Kesimpulan: Salah, silakan pilih bilangan prima lain untuk P dan Q";
}
}
}
?>
<html>
<head>
<title>Algoritma RSA</title>
</head>
<body>
<table align="left" 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="p"></td>
<td colspan="2"> <?= $msg_p_noprima;?></td>
</tr>
<tr>
<td>Masukkan q</td>
<td>: <input type="text" name="q" value="q"></td>
<td colspan="2"> <?= $msg_q_noprima;?></td>
</tr>
<tr>
<td>Plaintext</td>
<td> 
<textarea name="plainteks" rows="5" cols="25" >text area</textarea>
</td>
<td colspan="2"><?= $msg_null;?></td>
</tr>
<tr>
<td> </td><td>  <input type="submit" name="submit" value="Submit"></td>
</tr>
<tr><td> </td></tr>
<tr>
<td>Cipertext</td>
<td>  <?= $tes;?>
<textarea name="cipertext" rows="5" cols="25" readonly="readonly" ><?=$enkripsi;?></textarea>
</td>
<td rowspan="2" valign="top">
<?php
echo "P = $p <br/>";
echo "Q = $q <br/>";
echo "N = $n <br/>";
echo "Totient = $totient <br/>";
echo "E = $e <br/>";
echo "D = $d <br/><br/>";
echo "Public Key = ($e, $n) <br/>";
echo "Private Key = ($d, $n) <br/><br/>";
echo $msg_dekripsi;
?>
</td>
</tr>
<tr>
<td>Hasil dekripsi kembali (Plaintext)</td>
<td> 
<textarea name="decode" rows="5" cols="25" readonly="readonly" ><?=$dekripsi;?></textarea>
</td>
</tr>
</form>
</table>
</body>
</html>
?>
Kemudian buat file estensi php dengan nama sembarang2.php kemudian copy lagi nih script
<?php
function cek_prima($bil) {
if ($bil < 2) { return FALSE; } // nol (0) dan 1 bukan prima
for ($i=2; $i<=($bil / 2); $i++) {
if($bil % $i == 0) { return FALSE; }
}
return TRUE;
}
function gcd($e, $totient) {
$y = $e;
$x = $totient;
while(bccomp($y, 0) != 0) {
$w = $x % $y;
$x = $y;
$y = $w;
}
return $x;
}
/*
* Cari nilai D,
* D = E-1 (mod N)
*/
function cari_d($Ee, $Em) {
$u1 = 1;
$u2 = 0;
$u3 = $Em;
$v1 = 0;
$v2 = 1;
$v3 = $Ee;
while ($v3 != 0) {
$qq = floor($u3 / $v3);
$t1 = $u1 - ($qq * $v1);
$t2 = $u2 - ($qq * $v2);
$t3 = $u3 - ($qq * $v3);
$u1 = $v1;
$u2 = $v2;
$u3 = $v3;
$v1 = $t1;
$v2 = $t2;
$v3 = $t3;
$z = 1;
}
$uu = $u1;
$vv = $u2;
if ($vv < 0) {
$inverse = $vv + $Em;
} else {
$inverse = $vv;
}
return $inverse;
}
/*
* Cari nilai E,
* GCD(N,E) = 1 and 1<E<N
*/
function cari_e($totient) {
$e = 3;
if(bccomp(gcd($e, $totient), 1) != 0) {
$e = 5;
$step = 2;
while(bccomp(gcd($e, $totient), 1) != 0) {
$e = $e + $step;
if($step == 2) {
$step = 4;
} else {
$step = 2;
}
}
}
return $e;
}
/*
* Encrypt,
* X = M^E (mod N)
*/
function encode($teks, $e, $n, $s=1) {
$isiteks = "";
$jmlchar = strlen($teks);
$max = ceil($jmlchar/$s);
for($i=0; $i<$max; $i++) {
$gbchar = substr($teks, ($i * $s), $s);
$code = 0;
for($j=0; $j<$s; $j++) {
// karakter jadikan ASCII * 256^urutan karakter
$code = $code + (ord($gbchar[$j]) * bcpow(256,$j));
}
// karakter = karakter ^ E (mod N)
$code = bcpowmod($code, $e, $n);
$isiteks .= $code." ";
}
return trim($isiteks);
}
/*
* Decrypt,
* M = X^D (mod N)
*/
function decode($encode, $d, $n) {
$isiteks = "";
$char = split(" ", $encode);
$jmlchar = count($char);
for($i=0; $i<$jmlchar; $i++) {
// karakter = karakter enkripsi ^ D (mod N)
$code = bcpowmod($char[$i], $d, $n);
while(bccomp($code, "0") != 0) {
// kembalikan nilai ASCII (mod 256 dari karakter div 256) ke karakter asli
$ascii = $code % 256;
$code = floor($code / 256);
$isiteks .= chr($ascii);
}
}
return $isiteks;
}
?>
makin pusing kan ganemoticon-Blue Repost
0
2K
8
Thread Digembok
Urutan
Terbaru
Terlama
Thread Digembok
Komunitas Pilihan