Implementasi dan Analisis Kriptografi Hybrid Algoritma FEAL dan Algoritma ElGamal Dalam Pengamanan File Teks

(1)

(2)

BIODATA MAHASISWA

A. DATA MAHASISWA

1. Nama Lengkap : Syabrul Majid

2. Tempat dan Tanggal Lahir : Batang Hari, 26 Maret 1992

3. Agama : Islam

4. Jenis Kelamin : Laki-laki

5. NIM : 131421058

6. E-mail : majidadnese@gmail.com

7. Golongan Darah : O

8. Anak ke : 2 (dua) dari 4 (Empat) bersaudara 9. Departemen/Program Studi : S1 Ilmu Komputer

10.Alamat Rumah : Jl. Dr.Mansyur No 70 Medan 11.No. Telepon Rumah/HP : 085362050610

12.Asal SMA/SMK/MA : SMA Negeri 1 Danau Kembar 13.Tahun Lulus SMA/SMK/MA : 2010

14.Kodya/Kabupaten : Solok, Sumatera Barat

15.Alamat Sekolah : Jl. Panorama danau Kembar, Solok

16.Nilai NEM** : 48,00

17.Jalur Masuk PT : Ekstensi 18.SPP per Semester : Rp 3.000.000,- B. DATA ORANG TUA

1. Nama Ayah : Syahril

2. Nama Ibu : Anyam

3. Tempat dan Tanggal Lahir

- Ayah : Syahril, 07 September 1964

- Ibu : Anyam, 24 Mei 1966

4. Agama

- Ayah/Ibu : Islam

5. Pekerjaan

- Ayah : Tani

- Ibu : Almarhumah (Almh)

6. Pendidikan Terakhir

- Ayah : SMP

- Ibu : SD

7. Jumlah Tanggungan Orangtua : 4 (Empat) Orang

8. Alamat Kantor : -

9. Alamat Rumah Orangtua : Jl. Batang Hari, Kecamatan Lembah Gumanti, Alahan Panjang, Kabupaten Solok, Sumatera Barat

10. No. Telepon/HP : 087868606468

Medan, 06 Januari 2016 Hormat Saya, Syabrul Majid NIM 131421058


(3)

LISTING PROGRAM

Index.php <?php session_start(); include "elgamal.php"; require 'nor1.class.php'; require 'norctr.class.php'; $timer = microtime(true);

$pw = empty($_POST['pw']) ? '' : $_POST['pw']; $pt = empty($_POST['pt']) ? '' : $_POST['pt'];

$cipher = empty($_POST['cipher']) ? '' :

$_POST['cipher'];

$plain = empty($_POST['plain']) ? '' :

$_POST['plain'];

$encr = empty($_POST['encr']) ? $cipher :

FEALCtr::encrypt($pt, $pw, 256) ;

$decr = empty($_POST['decr']) ? $plain :

FEALCtr::decrypt($cipher, $pw, 256);

$enkripsi = new

elgamal($_SESSION['p'],$_SESSION['g'],$_SESSION['x'],$_SE SSION['y'],$_SESSION['k']);

$dekripsi = new

elgamal($_SESSION['p'],$_SESSION['g'],$_SESSION['x'],$_SE SSION['y'],$_SESSION['k']);

$cipherkey = empty($_POST['cipherkey']) ? '' : $_POST['cipherkey'];

$plainkey = empty($_POST['plainkey']) ? '' : $_POST['plainkey'];

$chippertextkey = empty($_POST['enkey']) ?

$cipherkey : $enkripsi->_enkripsi($plainkey) ;

$plaintextkey = empty($_POST['dekey']) ? $pw :

$enkripsi->_dekripsi($cipherkey) ;

if(!isset($_SESSION['username'])) { header('location:login.php'); }

else { $username = $_SESSION['username']; } require_once("koneksi.php");

$query = mysql_query("SELECT * FROM user WHERE username = '$username'");

$hasil = mysql_fetch_array($query); ?>


(4)

<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->

<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->

<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->

<!--[if gt IE 8]><!-->

<html class="no-js"> <!--<![endif]--> <html lang="en" class="no-js">

<head>

<meta charset="utf-8">

<meta http-equiv="X-UA-Compatible"

content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>IMPLEMENTASI DAN ANALISIS KRIPTOGRAFI HYBRID ALGORITMA FEAL DAN ALGORITMA ELGAMAL DALAM PENGAMANAN FILE TEKS</title>

<!-- Bootstrap -->

<link href="css/stylexFeal.css"

rel="stylesheet" /> <!-- canvas --> </head>

<header>

<section class="hero"> <div class="container">

<div class="row nav-wrapper">

<div class="col-md-6 col-sm-6 col-xs-6 text-right

navicon">

<p><a href="logout.php"> <img src="exit.png" width="50px" height="50px" alt="Exit"></a>

<div class="lg-container4">Proccess time :&nbsp;<?= round(microtime(true) - $timer, 3) ?>s</div></p>

<a id="trigger-overlay" class="nav_slide_button nav-toggle"

href="../template/index.php"><span></span></a></div> </div>

<div class="row hero-content"> <div class="col-md-12">

<body bgcolor="#284666">

<script language="JavaScript" type="text/javascript"> // function to hide and show a navigation menu


(5)

var aMenu = document.getElementById(aMenu);

aMenu.style.display = (aMenu.style.display == "block") ? "none" : "block";

}

</script>

<script language="JavaScript" type="text/JavaScript"> function DisplayShowHide()

{

if (document.NamaForm.NamaSelection.value ==

"muncul"){document.getElementById('DivTampil').style.disp lay="inline"}

if (document.NamaForm.NamaSelection.value ==

"muncul"){document.getElementById('DivTampil2').style.dis play="none"}

if (document.NamaForm.NamaSelection.value ==

"hilang"){document.getElementById('DivTampil').style.disp lay="none"}

if (document.NamaForm.NamaSelection.value ==

"hilang"){document.getElementById('DivTampil2').style.dis play="inline"}

}

</script>

<div class="lg-container">

<h3><b>File and Text Encryption using FEAL </b></h3> <font color="black">

<table> <tr>

<td>Choose &nbsp; : </td>

<td><form name='NamaForm' method='post' action='#'>

<select style="width:500px" name='NamaSelection'

onchange='DisplayShowHide()'>

<option value='hilang' selected>Text</option> <option value='muncul'>File</option></td> </select>

</form> <br> </table>

<div id='DivTampil' style='display:none'> <p>

<table class="fixed-layout"

style="border-collapse:collapse;">

<form action="file-processor.php" method="post" enctype="multipart/form-data">

<br><input type="file" name="fName"> <p>Choose Encrypt or Decrypt :


(6)

<td><select style="width:572px" name="aksi"> <option value="enc">Enkrypt</option> <option value="dec">Dekrypt</option> </select></br></td>

<tr><td><input type="text" name="pw" style="width:567px" size="62" placeholder="key">

<tr><td><input type="image" src="logo.png" width="50px" height="50px" alt="Submit button"></td>

</form> </table> </p> </div> <div id='DivTampil2'> <p><form method="post">

<table class="fixed-layout"

style="border-collapse:collapse;"> <tr>

<td width="60"><span

style="width:70px">Plaintext:</span></td>

<td width="50"><textarea type="text" name="pt" style="width:500px"><? echo stripslashes($pt); ?></textarea></td>

</tr> <tr>

<td width="69">Key:</td>

<td><input type="text" name="pw" style="width:500px" value="<?= $pw ?>">

</div> </tr>

</table>

<table class="fixed-layout"

style="border-collapse:collapse;">

</td><tr><br>

<td width="69">Mode

<td><select name="Mode">

<option value="">Block CHiper</option> </select>

</td></table>

<table height="164"> <br><tr>


(7)

<td><button type="submit" name="encr"

style="width:70px" value="Encrypt

it">Encrypt</button></td>

<td><input type="text" name="cipher" style="width:500px" value="<?= $encr ?>"></td></br>

</tr>

<tr><td><button type="submit" name="decr"

style="width:70px" value="Decrypt

it">Decrypt</button></td>

<td><textarea name="plain"

style="width:500px" "\t"><? echo stripslashes($decr); ?></textarea> </table> </form> </p> </div></div> <aside><div class="lg-container2"> <b><h3>Key Generator</h3></b> <table> <tr> <b>Kunci Publik</b> </tr> <tr> <td>p</td><td>&nbsp;:

<input type="text" size="27" value="<?= $_SESSION['p'] ?>"></td>

</tr> <tr>

<td>g</td><td>&nbsp;:

<input type="text" size="27" value="<?= $_SESSION['g'] ?>"></td>

</tr> <tr>

<td>y</td><td>&nbsp;:

<input type="text" size="27" value="<?= $_SESSION['y'] ?>"></td> </tr> </table> <table> <b>Kunci Privat</b> <tr> <td>x</td><td>&nbsp;:

<input type="text" size="27" value="<?= $_SESSION['x'] ?>"></td>

</tr> <tr>


(8)

<td>p</td><td>&nbsp;:

<input type="text" size="27" value="<?= $_SESSION['p'] ?>"></td>

</tr> </table> <table>

<b>Bilangan Acak Pengirim (k)</b>

<tr>

<td>k</td><td>&nbsp;:

<input type="text" size="27" value="<?= $_SESSION['k'] ?>"></td>

</tr> </table> <tr>

<td><input type='button'

style="width:227px" value='Bangkitkan Kunci'

onclick="javascript:location.href='key.php';"></td> </tr>

<div class="lg-container3"> <b><h3>Elgamal Key Encryption</b></h3>

<form method="post"> Key :

<table>

<tr>

<td><input type="text" name="plainkey" style="width:219px" placeholder="type key here"><?= $pw ?></td>

</tr> </tr> </table> <table> <tr> <td><button

type="submit" name="enkey" value="Encrypt it">Encrypt</button></td>

<td><input type="text" name="cipherkey" size="20" value="<?= rtrim($chippertextkey) ?>" "/t"></td>

</tr> </table>


(9)

<table>

<tr>

Encrypted Key:

</tr>

<td><button type="submit" name="dekey" value="Decrypt it">Decrypt</button></td>

<td><input type="text" name="pw" size="20" value="<?= $plaintextkey ?>"></td>

</tr> </table>

</form>

</div></div></aside> </body>

</html>

Login.php

<html> <head>

<link href="css/stylecov.css" rel="stylesheet" /> <link href="css/animate.css" rel="stylesheet"> <table>

<body bgcolor="#284666"> <div class="lg-container">

<h3 align="center" class="animated

fadeInDown">IMPLEMENTASI DAN ANALISIS KRIPTOGRAFI HYBRID <BR>ALGORITMA FEAL DAN ALGORITMA ELGAMAL <br> DALAM PENGAMANAN FILE TEKS </h3>

<h3 align="center" class="animated fadeInDown"> <br> SKRIPSI</h3>

<h3 align="center" class="animated fadeInDown"> <br> Syabrul Majid <br> 131421058</br> <br> <img position="center" src="img/Logo Fasilkom-TI.png" class="single_image"> </br> </h3>

<h3 align="center" class="animated

fadeInDown">FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI

INFORMASI <br> PROGRAM STUDI SARJANA ILMU KOMPUTER</br> UNIVERSITAS SUMATERA UTARA </br> MEDAN</br>2015</br></h3>

</div>


(10)

<form action="proseslogin.php" method="post">

<center><input name="username" align="center" type="text" placeholder="username"><br>

<input name="password" align="center" type="password" placeholder="password">

<br><input type="submit" value="Login" /> </center> </table> </div> </html> </body> ProsesLogin.php <?php session_start(); require_once("koneksi.php"); $username = $_POST['username']; $pass = $_POST['password'];

$cekuser = mysql_query("SELECT * FROM user WHERE username = '$username'");

$cekpass = mysql_query("SELECT * FROM user WHERE username = '$pass'");

$jumlah = mysql_num_rows($cekuser); $hasil = mysql_fetch_array($cekpass); if($jumlah == 0)

{

echo 'Username Belum Terdaftar!'; echo '<a href="login.php">Back</a>'; }

else {

if($pass = $hasil['password']) {

echo 'Password Salah!';

echo '<a href="login.php">Back</a>'; }

else

{

$_SESSION['username'] = $hasil['username']; header('location:index.php'); } } ?> Logout.php <?php session_start(); unset($_SESSION['username']);


(11)

echo "<script language=\"javascript\">location.href='login.php';</scrip t>"; ?> Nor1.class.php <?php Class FEAL {

public static function cipher($input, $w) {

$Nb = 4;

$Nr = count($w) / $Nb - 1; $state = array();

for ($i = 0; $i < 4 * $Nb; $i++) $state[$i % 4][floor($i / 4)] = $input[$i];

$state = self::addRoundKey($state, $w, 0, $Nb); for ($round = 1; $round < $Nr; $round++) { $state = self::subBytes($state, $Nb); $state = self::shiftRows($state, $Nb); $state = self::mixColumns($state, $Nb);

$state = self::addRoundKey($state, $w,

$round, $Nb); }

$state = self::subBytes($state, $Nb); $state = self::shiftRows($state, $Nb);

$state = self::addRoundKey($state, $w, $Nr, $Nb); $output = array(4 * $Nb);

for ($i = 0; $i < 4 * $Nb; $i++) $output[$i] = $state[$i % 4][floor($i / 4)];

return $output; }

private static function addRoundKey($state, $w, $rnd, $Nb)

{

for ($r = 0; $r < 4; $r++) {

for ($c = 0; $c < $Nb; $c++) $state[$r][$c] ^= $w[$rnd * 4 + $c][$r];

}

return $state; }


(12)

private static function subBytes($s, $Nb) {

for ($r = 0; $r < 4; $r++) {

for ($c = 0; $c < $Nb; $c++) $s[$r][$c] = self::$sBox[$s[$r][$c]];

}

return $s; }

private static function shiftRows($s, $Nb) {

$t = array(4);

for ($r = 1; $r < 4; $r++) {

for ($c = 0; $c < 4; $c++) $t[$c] = $s[$r][($c + $r) % $Nb];

for ($c = 0; $c < 4; $c++) $s[$r][$c] = $t[$c];

}

return $s; }

private static function mixColumns($s, $Nb) {

for ($c = 0; $c < 4; $c++) { $a = array(4);

$b = array(4);

for ($i = 0; $i < 4; $i++) { $a[$i] = $s[$i][$c];

$b[$i] = $s[$i][$c] & 0x80 ? $s[$i][$c] << 1 ^ 0x011b : $s[$i][$c] << 1;

}

$s[0][$c] = $b[0] ^ $a[1] ^ $b[1] ^ $a[2] ^ $a[3]; // 2*a0 + 3*a1 + a2 + a3

$s[1][$c] = $a[0] ^ $b[1] ^ $a[2] ^ $b[2] ^ $a[3]; // a0 * 2*a1 + 3*a2 + a3

$s[2][$c] = $a[0] ^ $a[1] ^ $b[2] ^ $a[3] ^ $b[3]; // a0 + a1 + 2*a2 + 3*a3

$s[3][$c] = $a[0] ^ $b[0] ^ $a[1] ^ $a[2] ^ $b[3]; // 3*a0 + a1 + a2 + 2*a3

}

return $s; }

public static function keyExpansion($key) {


(13)

$Nb = 4;

$Nk = count($key) / 4; $Nr = $Nk + 6;

$w = array(); $temp = array();

for ($i = 0; $i < $Nk; $i++) {

$r = array($key[4 * $i], $key[4 * $i + 1], $key[4 * $i + 2], $key[4 * $i + 3]);

$w[$i] = $r; }

for ($i = $Nk; $i < ($Nb * ($Nr + 1)); $i++) { $w[$i] = array();

for ($t = 0; $t < 4; $t++) $temp[$t] = $w[$i - 1][$t];

if ($i % $Nk == 0) {

$temp =

self::subWord(self::rotWord($temp));

for ($t = 0; $t < 4; $t++) $temp[$t] ^= self::$rCon[$i / $Nk][$t];

} else if ($Nk > 6 && $i % $Nk == 4) { $temp = self::subWord($temp);

}

for ($t = 0; $t < 4; $t++) $w[$i][$t] = $w[$i - $Nk][$t] ^ $temp[$t];

}

return $w; }

private static function subWord($w) {

for ($i = 0; $i < 4; $i++) $w[$i] =

self::$sBox[$w[$i]]; return $w; }

private static function rotWord($w) {

$tmp = $w[0];

for ($i = 0; $i < 3; $i++) $w[$i] = $w[$i + 1]; $w[3] = $tmp;

return $w; }


(14)

0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,

0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,

0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,

0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,

0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,

0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,

0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,

0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,

0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,

0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,

0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,

0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,

0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,

0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,

0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,

0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16);

private static $rCon = array(

array(0x00, 0x00, 0x00, 0x00), array(0x01, 0x00, 0x00, 0x00), array(0x02, 0x00, 0x00, 0x00), array(0x04, 0x00, 0x00, 0x00), array(0x08, 0x00, 0x00, 0x00), array(0x10, 0x00, 0x00, 0x00), array(0x20, 0x00, 0x00, 0x00), array(0x40, 0x00, 0x00, 0x00), array(0x80, 0x00, 0x00, 0x00), array(0x1b, 0x00, 0x00, 0x00), array(0x36, 0x00, 0x00, 0x00)); }


(15)

/* - - - - - - */


(16)

Norctr.class.php

<?php

Class FEALCtr extends FEAL {

public static function encrypt($plaintext, $password, $nBits)

{

$blockSize = 16;

if (!($nBits == 128 || $nBits == 192 || $nBits == 256)) return '';

$nBytes = $nBits / 8; $pwBytes = array();

for ($i = 0; $i < $nBytes; $i++) $pwBytes[$i] = ord(substr($password, $i, 1)) & 0xff;

$key = FEAL::cipher($pwBytes,

FEAL::keyExpansion($pwBytes));

$key = array_merge($key, array_slice($key, 0, $nBytes - 16));

$counterBlock = array();

$nonce = floor(microtime(true) * 1000); $nonceMs = $nonce % 1000;

$nonceSec = floor($nonce / 1000); $nonceRnd = floor(rand(0, 0xffff));

for ($i = 0; $i < 2; $i++) $counterBlock[$i] = self::urs($nonceMs, $i * 8) & 0xff;

for ($i = 0; $i < 2; $i++) $counterBlock[$i + 2] = self::urs($nonceRnd, $i * 8) & 0xff;

for ($i = 0; $i < 4; $i++) $counterBlock[$i + 4] = self::urs($nonceSec, $i * 8) & 0xff;

$ctrTxt = '';

for ($i = 0; $i < 8; $i++) $ctrTxt .= chr($counterBlock[$i]);

$keySchedule = FEAL::keyExpansion($key);

$blockCount = ceil(strlen($plaintext) /

$blockSize);

$ciphertxt = array();

for ($b = 0; $b < $blockCount; $b++) {

for ($c = 0; $c < 4; $c++) $counterBlock[15 - $c] = self::urs($b, $c * 8) & 0xff;

for ($c = 0; $c < 4; $c++) $counterBlock[15 - $c - 4] = self::urs($b / 0x100000000, $c * 8);


(17)

$cipherCntr = FEAL::cipher($counterBlock, $keySchedule);

$blockLength = $b < $blockCount - 1 ? $blockSize : (strlen($plaintext) - 1) % $blockSize + 1; $cipherByte = array();

for ($i = 0; $i < $blockLength; $i++) {

$cipherByte[$i] = $cipherCntr[$i] ^

ord(substr($plaintext, $b * $blockSize + $i, 1));

$cipherByte[$i] = chr($cipherByte[$i]); }

$ciphertxt[$b] = implode('', $cipherByte); }

$ciphertext = $ctrTxt . implode('', $ciphertxt); $ciphertext = base64_encode($ciphertext);

return $ciphertext; }

public static function decrypt($ciphertext,

$password, $nBits) {

$blockSize = 16;

if (!($nBits == 128 || $nBits == 192 || $nBits == 256)) return '';

$ciphertext = base64_decode($ciphertext);

$nBytes = $nBits / 8; $pwBytes = array();

for ($i = 0; $i < $nBytes; $i++) $pwBytes[$i] = ord(substr($password, $i, 1)) & 0xff;

$key = FEAL::cipher($pwBytes,

FEAL::keyExpansion($pwBytes));

$key = array_merge($key, array_slice($key, 0, $nBytes - 16));

$counterBlock = array();

$ctrTxt = substr($ciphertext, 0, 8);

for ($i = 0; $i < 8; $i++) $counterBlock[$i] = ord(substr($ctrTxt, $i, 1));

$keySchedule = FEAL::keyExpansion($key);


(18)

$nBlocks = ceil((strlen($ciphertext) - 8) / $blockSize);

$ct = array();

for ($b = 0; $b < $nBlocks; $b++) $ct[$b] = substr($ciphertext, 8 + $b * $blockSize, 16);

$ciphertext = $ct; $plaintxt = array();

for ($b = 0; $b < $nBlocks; $b++) {

for ($c = 0; $c < 4; $c++) $counterBlock[15 - $c] = self::urs($b, $c * 8) & 0xff;

for ($c = 0; $c < 4; $c++) $counterBlock[15 - $c - 4] = self::urs(($b + 1) / 0x100000000 - 1, $c * 8) & 0xff;

$cipherCntr = FEAL::cipher($counterBlock,

$keySchedule);

$plaintxtByte = array();

for ($i = 0; $i < strlen($ciphertext[$b]); $i++) {

$plaintxtByte[$i] = $cipherCntr[$i] ^

ord(substr($ciphertext[$b], $i, 1));

$plaintxtByte[$i] =

chr($plaintxtByte[$i]); }

$plaintxt[$b] = implode('', $plaintxtByte); }

$plaintext = implode('', $plaintxt); return $plaintext;

}

private static function urs($a, $b) {

$a &= 0xffffffff; $b &= 0x1f;

if ($a & 0x80000000 && $b > 0) { $a = ($a >> 1) & 0x7fffffff; $a = $a >> ($b - 1);

} else {

$a = ($a >> $b); }

return $a; }


(19)

} /* - - - - - - */ Key.php <?php session_start(); include "elgamal.php";

$key = new elgamal(0,0,0,0,0); $key->_key(258);

$_SESSION[p] = $key->p; $_SESSION[g] = $key->g; $_SESSION[x] = $key->x; $_SESSION[y] = $key->y; $_SESSION[k] = $key->k;

echo "<script

language=\"javascript\">location.href='index.php';</scrip t>"; ?> <html><h1>Please Wait</h1> </html> feal.php <?php session_start(); include "elgamal.php"; require 'nor1.class.php'; require 'norctr.class.php'; $timer = microtime(true);

$pw = empty($_POST['pw']) ? '' : $_POST['pw'];

$pt = empty($_POST['pt']) ? '' : $_POST['pt'];

$cipher = empty($_POST['cipher']) ? '' :

$_POST['cipher'];

$plain = empty($_POST['plain']) ? '' :

$_POST['plain'];

$encr = empty($_POST['encr']) ? $cipher :

FEALCtr::encrypt($pt, $pw, 256) ;

$decr = empty($_POST['decr']) ? $plain :

FEALCtr::decrypt($cipher, $pw, 256);

$enkripsi = new

elgamal($_SESSION['p'],$_SESSION['g'],$_SESSION['x'],$_SE SSION['y'],$_SESSION['k']);


(20)

$dekripsi = new elgamal($_SESSION['p'],$_SESSION['g'],$_SESSION['x'],$_SE SSION['y'],$_SESSION['k']);

$cipherkey = empty($_POST['cipherkey']) ? '' : $_POST['cipherkey'];

$plainkey = empty($_POST['plainkey']) ? '' : $_POST['plainkey'];

$chippertextkey = empty($_POST['enkey']) ?

$cipherkey : $enkripsi->_enkripsi($pw) ;

$plaintextkey = empty($_POST['dekey']) ? $plainkey : $enkripsi->_dekripsi($cipherkey) ;

?>

<!DOCTYPE html>

<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->

<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->

<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->

<!--[if gt IE 8]><!-->

<html class="no-js"> <!--<![endif]--> <html lang="en" class="no-js">

<head>

<meta charset="utf-8">

<meta http-equiv="X-UA-Compatible"

content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>IMPLEMENTASI DAN ANALISIS KRIPTOGRAFI HYBRID <br> ALGORITMA FEAL DAN ALGORITMA ELGAMAL <br> DALAM PENGAMANAN FILE TEKS</title>

<!-- Bootstrap -->

<link href="css/stylexFeal.css"

rel="stylesheet" /> <!-- canvas --> </head>

<header>

<section class="hero"> <div class="container">

<div class="row nav-wrapper">

<div class="col-md-6 col-sm-6 col-xs-6 text-right

navicon"> <p>MENU</p>


(21)

<a id="trigger-overlay" class="nav_slide_button nav-toggle"

href="../template/index.php"><span></span></a></div> </div>

<div class="row hero-content"> <div class="col-md-12">

<body bgcolor="#284666">

<script language="JavaScript" type="text/javascript"> // function to hide and show a navigation menu

function showHide(aMenu) {

var aMenu = document.getElementById(aMenu);

aMenu.style.display = (aMenu.style.display == "block") ? "none" : "block";

}

</script>

<script language="JavaScript" type="text/JavaScript"> function DisplayShowHide()

{

if (document.NamaForm.NamaSelection.value ==

"muncul"){document.getElementById('DivTampil').style.disp lay="inline"}

if (document.NamaForm.NamaSelection.value ==

"muncul"){document.getElementById('DivTampil2').style.dis play="none"}

if (document.NamaForm.NamaSelection.value ==

"hilang"){document.getElementById('DivTampil').style.disp lay="none"}

if (document.NamaForm.NamaSelection.value ==

"hilang"){document.getElementById('DivTampil2').style.dis play="inline"} } </script> <div class="lg-container"> <font color="black"> <table> <tr>

<td>Choose &nbsp; : </td>

<td><form name='NamaForm' method='post' action='#'>

<select style="width:500px" name='NamaSelection'

onchange='DisplayShowHide()'>

<option value='hilang' selected>Text</option> <option value='muncul'>File</option></td> </select>

</form> <br>


(22)

</table>

<div id='DivTampil' style='display:none'> <p>

<table class="fixed-layout"

style="border-collapse:collapse;">

<form action="file-processor.php" method="post" enctype="multipart/form-data">

<br><input type="file" name="fName"> <br>Pilih Proses :

<select style="width:770px" name="aksi"> <option value="enc">Enkripsi</option> <option value="dec">Dekripsi</option> </select></br>

<tr><td><input type="text" name="pw" style="width:770px" size="62" placeholder="key">

<tr><td><input type="image" src="logo.png" width="50px" height="50px" alt="Submit button"></td>

</form> </table> </p> </div> <div id='DivTampil2'> <p><form method="post">

<table class="fixed-layout"

style="border-collapse:collapse;"> <tr>

<td width="60"><span

style="width:70px">Plaintext:</span></td>

<td width="50"><textarea type="text" name="pt" style="width:500px"><? echo stripslashes($pt); ?></textarea></td>

</tr> <tr>

<td width="69">Key:</td>

<td><input type="text" name="pw" style="width:500px" value="<?= $pw ?>">

<div class="wrapper"> <div class="menuHeader"

onclick="showHide('menu1')">Encrypt Key </div>

<div id="menu1" class="menuList"> <table width='300'>


(23)

<tr>

<td colspan='2'><b>Kunci Publik</b></td>

</tr> <tr>

<td

width='150'>p</td><td>: <input type="text" rows="10" cols="60" value="<?= $_SESSION['p'] ?>"></td>

</tr> <tr>

<td>g</td><td>: <input type="text" rows="10" cols="60" value="<?= $_SESSION['g'] ?>"></td>

</tr> <tr> <tr>

<td>y</td><td>: <input type="text" rows="10" cols="60" value="<?= $_SESSION['y'] ?>"></td>

</tr>

<td colspan='2'><b>Kunci Privat</b></td>

</tr> <tr>

<td>x</td><td>: <input type="text" rows="10" cols="60" value="<?= $_SESSION['x'] ?>"></td>

</tr> <tr>

<td>p</td><td>: <input type="text" rows="10" cols="60" value="<?= $_SESSION['p'] ?>"></td>

</tr> </tr>

<td colspan='2'><b>Bilangan Acak Pengirim (k)</b></td>

</tr> <tr>

<td>k</td><td>: <input type="text" rows="10" cols="60" value="<?= $_SESSION['k'] ?>"></td>

</tr> <tr>

<td colspan='2'><input

type='button' value='Bangkitkan Kunci'

onclick="javascript:location.href='key.php';"></td> </tr>

<tr> </tr> <tr>


(24)

<td width='150' valign='top'>PlainText</td>

<td>

<form

enctype="multipart/form-data" method='POST'

action='enkripsi.php'> <input type='file' name='plainText'><br> <input type='submit' value='Enkripsi'> </form> </td> </tr> <tr> <td colspan='2'>&nbsp;</td> </tr> <tr>

<td width='150'

valign='top'>ChipperText</td>

<td>

<form

enctype="multipart/form-data" method='POST'

action='dekripsi.php'> <input type='file' name='chipperText'><br> <input type='submit' value='Dekripsi'> </form> </td> </tr> </table> <form method="post"> <table> <tr> <td width="60">Plaintext:</td>

<td width="50"><input type="text" name="pw" rows="10" cols="60"><? echo stripslashes($pw); ?></td> </tr> </tr> </table> <table height="164"> <tr>


(25)

<td><button

type="submit" name="enkey" value="Encrypt it">Encrypt</button></td>

<td><input type="text" name="cipherkey" size="79" value="<?= $chippertextkey ?>" "/t"></td> </tr> </table> <table> <tr> <td width="60">Plaintext:</td> </tr>

<td><button type="submit" name="dekey" value="Decrypt it">Decrypt</button></td>

<td><input type="text" name="plainkey" size="79" value="<?= $plaintextkey, $del2 ?>"></td> </tr> </table> </form> </div> </tr> </table>

<table class="fixed-layout"

style="border-collapse:collapse;">

</td><tr><br>

<td width="69">Mode

<td><select name="Mode">

<option value="">Block CHiper</option> </select>

</td></table>

<table height="164"> <br><tr>

<td><button type="submit" name="encr"

style="width:70px" value="Encrypt

it">Encrypt</button></td>

<td><input type="text" name="cipher" style="width:500px" value="<?= $encr ?>"></td></br>


(26)

<tr><td><button type="submit" name="decr"

style="width:70px" value="Decrypt

it">Decrypt</button></td>

<td><textarea name="plain"

style="width:500px" "\t"><? echo stripslashes($decr); ?></textarea>

</table> </form>

</p>

</div><a class="chosen-single" tabindex="-1"> <tr id="row-frm-text">

<td style="vertical-align:top;"> <div style="padding-top: 3px;">

</body> </html>

Elgamal.php

<?php

class elgamal{

public static $p,$g,$x,$y,$k;

public function __construct($p,$g,$x,$y,$k){ $this->p = $p;$this->g = $g;

$this->x = $x;$this->y = $y; $this->k = $k;

}

public function _key($batas){

$this->p = $this->_p($batas); $this->g = $this->_g();

$this->x = $this->_x();

$this->y = $this->_y($batas); $this->k = $this->_k();

}

private function _p($batas){

$tmpP = rand($batas,$batas*10); $cek = '0';

for ($i=2;$i<$tmpP;$i++){ if (($tmpP % $i) == 0){

$cek = '1'; break;

} }

if ($cek == '0'){ return $tmpP; }


(27)

return $this->_p($batas); }

}

private function _g(){

return rand(1,$this->p - 1); }

private function _x(){

return rand(1,$this->p - 1); }

private function _y($batas){

return

$this->_rekursifMod($this->g,$this->x,$this->p); }

private function _k(){

return rand(1,$this->p - 2); }

public function _rekursifMod($basis,$pangkat,$mod){ if ($pangkat <= 2)

return ((pow($basis,$pangkat)) % $mod); else{

$s = $pangkat % 2; if ($s == 0){

$b = $pangkat / 2; $b1 = $b; $b2 = $b; }

else{

$b = floor($pangkat/2); $b1 = $b; $b2 = $b + 1; }

return

((($this->_rekursifMod($basis,$b1,$mod)) *

($this->_rekursifMod($basis,$b2,$mod))) % $mod); }

}

public function _enkripsi($plainText){ $ascii = $this->_toAscii($plainText);


(28)

$chipperText = "";

for ($i=0;$i<(strlen($ascii));$i+=3){ $tmp = substr($ascii,$i,3);

if (strlen($tmp)==1) $tmp = "00".$tmp; if (strlen($tmp)==2) $tmp = "0".$tmp;

$r = $this->_rekursifMod($this->g,$this->k,$this->p);

$s =

((($this->_rekursifMod($this- >y,$this->k,$this->p))*($this->_rekursifMod($tmp,1,$this->p))) % $this->p);

$chipperText .= $r." ".$s." "; }

return $chipperText; }

public function _dekripsi($chipperText){ $t = explode(" ",$chipperText); $ascii = "";

for ($i=0;$i<(count($t));$i+=2){ $pkt = $this->p - 1 - $this->x;

$a =

$this->_rekursifMod($t[$i],$pkt,$this->p);

$b = (($t[$i+1]*$a) % $this->p); if (strlen($b)==1) $b = "00".$b; if (strlen($b)==2) $b = "0".$b; $ascii .= $b;

}

return $this->_toText($ascii); }

private function _toAscii($text){ $ascii = "";

for ($i=0;$i<(strlen($text));$i++){ $char = substr($text,$i,1); $a = ord($char);

if (strlen($a)==1) $a = "00".$a; if (strlen($a)==2) $a = "0".$a; if (strlen($a)==3) $a = "".$a; $ascii .= $a;

}

return $ascii; }

private function _toText($ascii){ $text = "";

for ($i=0;$i<(strlen($ascii));$i+=3){ $bil = substr($ascii,$i,3);


(29)

$text .= chr($bil); } return $text; } } ?> File-processor.php <?php require 'nor1.class.php'; require 'norctr.class.php'; $timer = microtime(true);

$pt = empty($_POST['pt']) ? '' : $_POST['pt'];

$cipher = empty($_POST['cipher']) ? '' :

$_POST['cipher'];

$plain = empty($_POST['plain']) ? '' :

$_POST['plain'];

$target_dir = "upload/"; $aksi=$_POST['aksi']; $pw=$_POST['pw'];

$targetFile = basename( $_FILES["fName"]["name"]); //option aksi

if($aksi=='enc'){

if (move_uploaded_file($_FILES["fName"]["tmp_name"], $target_dir.$targetFile)) {

$success=true;

/*---*/

$fh = fopen($target_dir.$targetFile,

'r');//membuka file hasil upload

$pt = fread($fh, 2097152); fclose($fh);

$encr = rtrim($_POST["fName"]) ? $cipher : FEALCtr::encrypt($pt, $pw, 256) ;

$fp = fopen($target_dir.$targetFile,

'wb');//menimpa file hasil upload dengan file hasil enkripsi

fwrite($fp,$encr); fclose($fp);

/*---*/ } else {


(30)

$success=false; } } else if($aksi='dec'){ if(move_uploaded_file($_FILES["fName"]["tmp_name"], $target_dir.'/'.$targetFile)){ /*---*/

$fh = fopen($target_dir.'/'.$targetFile, 'r');

$cipher = fread($fh, 2097152); fclose($fh);

$decr = rtrim($_POST['decr']) ? $plain : FEALCtr::decrypt($cipher, $pw, 256);

$fp = fopen($target_dir.$targetFile,

'wb'); fwrite($fp,$decr); fclose($fp); } } ?> <html>

<header><link href="css/stylepro.css" rel="stylesheet" /> </header>

<body bgcolor="#284666">

<p> <a href="index.php"> <img src="back.png" width="50px" height="50px" alt="Back"></a>

<a href="logout.php"> <img src="exit.png" width="50px" height="50px" alt="Exit"></p></a>

<div class="lg-container">

<h2>Succes Proccess:</h2> <h3><br><i><u><?= $targetFile ?></u></i></h3>

<a download href="<?= $target_dir.$targetFile ?>" style="text-decoration:none">

<center><br><img src="download.png" width="50px" height="50px" alt="Home" >

</br>

<br>Save File</center></br></a> </div>

</body> </html>


(31)

DAFTAR PUSTAKA

[1] Bofandra. 2009. Implementasi Data Encryption Standart untuk Enkripsi Dekripsi Berkas PDF. Makalah. Bandung: Institut Teknologi Bandung. [2] Fitri, S. 2009. Implementasi Algoritma Kriptografi ElGamal dan WATERMARK

dengan Metode LSB Pada Citra. Skripsi. Yogyakarta: Sekolah Tinggi manajemen Informatika Dan Komputer.

[3] T, Semuil, Wijaya, M. C. 2009. Pengamanan Data menggunakan Metoda Enkripsi Simetri dengan Algoritma FEAL. Jurnal. Bandung: Universitas Kristen Maranatha.

[4] Prasetiyo, B. 2013. Kombinasi Steganografi Bit Matching dan Kriptografi ElGamal untuk Pengamanan Data . Tesis. Semarang: Universitas Diponegoro.

[5] Mollin, R. A. 2002. RSA and PublicKey Cryptography. Florida: Chapman & Hall/CRC.

[6] Mollin, R. A. 2007. An Introduction to Cryptography. Edisi ke-2. Florida: Chapman & Hall/CRC.

[7] Mollin, R. A. 2008. Fundamental Number Theory with Applications. Edisi ke-2. Florida: Chapman & Hall/CRC.

[8] Munir, Rinaldi. 2006. Kriptografi. Bandung: Penerbit Informatika.

[9] Paar, Christof dan Pelzl, Jan. 2010. Understanding Cryptography. Berlin: Springer-Verlag.

[10] Schneier, Bruce. 1996. Applied Cryptography. Edisi ke-2. New Jersey: John Wiley & Sons, Inc.

[11] Schneier, Bruce. 1996. Applied Cryptography: Protocols, Algorithms, and Source Code in C. Edisi ke-2. New Jersey: John Wiley & Sons, Inc. [12] Sudarmono. 2016. Aplikasi Algoritma ElGamal dan Cryptanalis menggunakan

teori Probabilitas Pada Kartu ATM. Skripsi. Skripsi: Universitas Sebelas Maret.

[13] Zaki S. 2011. Program Aplikasi Kemanan Citra Dengan Algoritma ElGamal dan Tranformasi Wavelet Diskrit. Tesis. Semarang: Universitas Diponegoro.


(32)

[14] Kak, A. 2015. Blok Cipher and Data Encription Standart. Lecture Notes. India: Purdue University.

[15] Knine, L.L. 2009. A new Variant of FEAL Strem Cipher. Journal: Engineering And Technology.

[16] Dawson, E. Gustafson, H. Henricksen, M. Millian, B. 2002. Evaluation of FEAL Stream Cipher. Australia, Queensland University of Technology. [17] Menezes, Oorcshot, and Vanstone, 1996, Handbook of Applied Cryptography,

CRC Press, Inc. USA.

[18] Bilham E, Carmeli Y, 2014, An Improvement of Linear Cryptanalysis with Addition Operation with Applications To FEAL-8X, Computer Science Department – Israel Institute of Technology, Israel.

[19] Biswas S, Chellappa, 2011, Face Recognition from Still Images dan Video, Department of Electrical and Computer Enginering – University of Maryland – Colledge Park, USA.


(33)

BAB 3

ANALISIS DAN PERANCANGAN SISTEM

3.1Analisis Sistem

Analisis merupakan rekayasa perangkat lunak yang menjadi penghubung antara penglokasian perangkat lunak tingkat sistem dan perancangan perangkat lunak, dalam hal ini perancangan interface program aplikasi ini untuk proses enkripsi maupun dekripsi pesan/data, memungkinkan perekayasa sistem menentukan fungsi dan kerja perangkat lunak, menunjukkan interface perangkat lunak dengan elemen sistem yang lain, dan membangun batasan yang harus dipenuhi oleh perangkat lunak.

Ketika berbicara tentang program aplikasi tentu tidak terlepas dari komponen interface dan user. Dalam interface sendiri terdapat berbagai elemen yang membangunnya agar dapat aplikasi tersebut berfungsi. Didalam program aplikasi terdapat arsitektur, basis data (database), dan desain prosedural yang mendukung dalam program aplikasi tersebut sampai benar-benar digunakan dengan baik. User merupakan instruktor dalam aplikasi tersebut sehingga dapat berjalan sesui dengan tujuan aplikasi tersebut dibuat.

3.2Analisis Masalah

Dalam distribusi data antar pengguna membutuhkan jaminan keamanan dimana data yang dikirim tidak diganggu seperti dicuri, dihapus dimodifikasi maupun dirusak sehingga membutuhkan suatu teknik untuk pengamannya. Kriptografi merupakan salah satu teknik untuk mengamankan data dengan cara mengubah bentuk data menjadi bentuk yang tidak dapat dikenali sehingga pihak asing hanya dapat mengetahui isi data tersebut dengan memecahkan kunci algoritma kriptografi.


(34)

Implementation Algorithm Hybrid FEAL

and ElGamal

Encryption and Decryption Text Data

Human Method

Material Procedure

Lehmann Prime Generetor for generator prime number Encryption and decryption Computer PHP programming and Database MySQL Sending message Sending Message with cipher number

FEAL (simetric) algorithm and ElGamal algorithm (asimetric) / Hybrid algorithm

Seluruh masalah yang timbul dapat disajikan dalam sebuah diagram Ishikawa seperti pada gambar 3.1 dibawah ini:

Gambar 3.1 Diagram Ishikawa pada implementasi Algoritma hybrid FEAL dan Elgamal dalam pengamanan Data Teks

3.2.1 Analisis persyaratan (Requirement Analysis)

Analisis persyaratan sebuah sistem dikelompokkan kedalam dua bagian secara garis besar yaitu:

1. Analisis persyaratan fungsional

Persyaratan fungsional merupakan segala sesuatu yang harus di miliki oleh sistem agar sistem berjalan sesui dengan fungsinya dan dapat dimaksimalkan. Enkripsi dan dekripsi dilakukan dengan algoritma hybrid FEAL dan ElGamal dimana kunci FEAL sebagai kriptografi simetri dijadikan kunci ElGamal yang diketahui sebagai algoritma asimetris sehingga terbentuknya kriptografi hybrid. Kunci dibangkitkan dengan pembangkit bilangan prima dengan metode Lehmann (Lehmann Prime Generator).

2. Analisis persyaratan Non-Fungsional

Persyaratan non fungsional adalah persyaratan apa yang harus dilakukan sistem. Seringkali berupa batasan atau sesuatu yang menjadi perhatian


(35)

stakeholder sebuah sistem. Persyaratan non fungsional meliputi performa mudah untuk di pelajari dan di implementasikan, hemat biaya dan waktu dokumen dan kontrol terhadap sistem tersebut.

a. Sistem dapat diubah antara karakter ke desimal dengan menggunakan tabel ASCII dan juga sebaliknya dengan benar, sehingga tidak ada perbedaan hasil dekripsi dengan cara informasi asli.

b. Waktu pengesekusian untuk enkripsi dari FEAL dan menjadi kunci juga pada ElGamal.

3.3Analisis Proses

3.3.1 Proses sistem dengan use case diagrams

Pemodelan sistem dilakukan bertujuan untuk memodelkan hasil analisis sistem yang dirancang. Pemodelan hasil analisis sistem yang dirancang menggunakan use case diagrams.

Use case diagram menggambarkan apa saja aktifitas yang dilakukan oleh suatu sistem dari sudut pandang pengamatan luar. Yang menjadi persoalan itu apa yang dilakukan dan bagimana melakukannya. Use case diagram lebih dekat kaitannya dengan kejadian-kejadian. Kejadian (scenario) merupakan contoh apa saja yang terjadi ketika seseorang berinteraksi dengan sistem.

Berdasarkan analisis kebutuhan sistem beberapa hal yang harus dipenuhi oleh sistem, yaitu:

1. Sistem harus dapat membangkitkan kunci public dan kunci private yang akan digunakan dalam proses enkripsi dan dekripsi.

2. Sistem harus dapat melakukan enkripsi data, kemudian sistem juga harus dapat mendeksripsikan ciphertext kedalam bentuk teks yang bisa dibaca.

3. Sistem harus dapat berinteraksi data atu informasi yang telah disiapkan kedalam sistem.


(36)

Gambar 3.2 Use case Algoritma hybrid FEAL dan ElGamal

Dari use case diatas tampak bahwa penerima membangkitkan kunci public dan private, kemudian kunci public diberikan kepada siapa saja yang ingin mengirim data atau informasi kepadanya. Sedangkan kunci private hanya diketaui antara pengirim dan penerima saja dan tidak boleh diketahi oleh orang lain. Setelah pengirim mendapatkan kunci public, kemudian pengirim melakukan proses enkripsi. Setelah data di enkripsi maka pengirim dapat mengirimkan dengan aman melaui transfer data. Dan penerima akan mendekripsikan dengan mengetahui kunci private yang diberiakan oleh si pengirim. Pada tabel dibawah ini disajikan tabel dokumentasi naratif untuk use case diagram.


(37)

Tabel 3.1 Dokumentasi naratif program enkripsi dan dekripsi Algoritma FEAL dan ElGamal

Nama use case Program enkripsi

Actor Penerima dan pengirm pesan

Deskripsi Use case mendeskripsikan bagaimana proses yang terjadi anatara suatu proses yang lain dan atara proses pengirim dan penerima

Pre-condition Data atau informasi yang yang dikirim berupa txt

Typical cuourse of event

Aksi aktor Respons sistem Langkah ke-1: penerima

menjalankan program

Langkah ke-2: Sistem akan memuat modul-modul pada menu utama

Langkah ke-3: Penerima akan membangkitkan kunci dari menu utama

Langkah ke-4: sistem kemudian membangkitkan kunci public dan private Langkah ke-5: penrima

akan menyimpan kunci, kemudian membagikan kunci public kepada setiap orang yang ingin mengirim data dan atau informasi kepadanya

Langkah ke 6: Pengirim kemudian menjalankan program dan melakukan proses enkripsi dan memberikan kepada penerima dengan memberitahukan kunci private.

Alternative curse

Aksi aktor Respons sistem

Memberikan kunci hybrid

Jika kunci hybrid belum berjalan maka kembali ke enkripsi semula

Post kondition Data atau informasi yang dikirim si pengirim kepada penerima sampai tanpa dikatehui oleh orang lain

Pada tabel yang disajikan diatas menjelaskan use case program enkripsi dan deksripsi algoritma FEAL dan ElGamal secara detail, dimana terdapat actor, altenative curse


(38)

pre condition, serta action dari pengguna dan sistem yang telah dibuat. Dengan penyajian tabel diatas dapat diketahui bagaimana cara penggunaan program dan langkah-langkah dalam menggunakan program.

Pada use case dapat di lihat beberapa aksi yang dilakukan oleh aktor, yaitu bangkitkan kunci, enkripsi dan dekripsi. Untuk menjelaskan kertiga proses dapat digambarkan dengan diagram activity dari setiap proses. Untuk menjelaskan proses bangkitkan kunci, maka berikut akan dibuatkan dokumentasi naratif untuk use case bangkitkan kunci:

Tabel 3.2 Proses pembangkitan Kunci Nama use case Bangkitkan kunci

Aktor Penerima

Deskripsi use case

Use case mendekripsikan bagaimana penerima menggunakan sistem untuk membangkitkan sebuah kunci private dan public algoritma FEAL dan ElGamal

Pre-condition Penerima belum memiliki kunci private dan public

Typical course of event

Aksi Aktor Respon sistem Langkah 1:

penerima menginputkan sebuah bilangan

Langkah 2: sistem mencheck apakah bilangan tersebut prima atau komposit. Jika prima maka bilangan tersebut akan di cetak dan jika tidak akan digenerate sebuah bilangan prima.

Langkah 3: Penerima menginputkan bilangan prima

Langkah 4: sistem akan

membangkitkan sebuah kunci private dan public.

Langkah 5: ketika kunci dibangkitkan makan kunci dari Algoritma FEAL di jadikan kunci di algoritma ElGamal

Langkah 6: kunci akan di simpan di dalam sistem


(39)

Alternative course Aksi aktor Respons sistem

- -

Post kondition Kunci telah dibangkitkan dan di simpan di sistem

Merujuk pada tabel diatas dapat dijelaskan bahawa use case membangkitkan kunci secara detail dimana terdapat aktor, pre-condition, post-condition serta action dari user dan system. Dengan tabel diatas dapat diketahui apa saja action yang dilakukan pengguna dan sistem pada suatu pembangkitan kunci pada algoritma FEAL dan ElGamal.

Pada proses enkripsi dan penyisipan, maka hal pertama yang dilakukan sistem adalah memerika apakah data atau informasi yang akan disiapkan ada atau tidak, kemudian sistem juga mengecek kunci public dan kunci private. Pada proses enkripsi, maka setiap karakter data atu informasi (data .*txt) akan diubah kedalam bentuk desimal menggunakan kode ASCII. Setelah diubah ke bentuk desimal, maka dilakukan proses enkripsi dengan menggunakan algoritma ElGamal.

Tabel 3.3 Proses Enkripsi ElGamal Nama use case Eknkripsi

Aktor Recipient

Dekripsi Use case ini berfungsi untuk melakukan enkripsi dengan algoritma FEAL, kemuadian hasil enkripsi FEAL tersebut dijadikan kunci untuk algoritma ElGamal

Pre-condition Data dalam bentuk txt

Aksi aktor Respons sistem

Typical course of event

Langkah 1: pengirim melakukan input data txt

Langkah 2: sisten akan melakukan apakah kunci sudah terdapat atau belum

-

Langkah 3: sisten akan melakukan proses enkripsi


(40)

-

langkah 4: sistem akan mencetak ciphertext

Alternative course Aksi aktor Respons system

- -

Post condition

Data telah di enkripsi, dimana informasi teks dilihat dalam bentuk ciphertext dan tidak mungki dipahami dalam kata yang memiliki sebuah makna

Dari tabel diatas dapat dipahami bahwa use case dalam proses enkripsi dimana terdapat aktor, pre condition, post condition dari user dan system. Dengan memperhatikan tabel diatas dapat diketahui action yang dilakukan user dan proses yang terjadi proses enkripsi.

3.3.2 Proses sistem dengan Sequence diagrams

Sequence diagram adalah suatu diagram yang mengambarkan interaksi antara actor dan sistem pada use case scenario diagram ini sangat membantu melihat pesan hight level yang masuk dan keluar dari sistem (Bentley, Whitten, 2007).

Garis penuh menunjukkan input yang dilakukan oleh user pada algoritma Hybrid FEAL dan ElGamal, sedangkan garis yang putus-putus yang mengarah ke bagian user menunjukkan output yang dihasilkan oleh system. Tiap-tiap inputan yang terjadi memiliki activation bars yang menunjukkan proses enkripsi dan dekripsi yang dialakukan oleh users dan system. Pada sequence diagram dapat dijelaskan pada gambar 3.4 dibawah ini:


(41)

Gambar 3.3 Proses Enkripsi dan Dekripsi dengan sequence diagram Algoritma Hybrid FEAL dan ElGamal

3.3.3 Proses sistem dengan Activity diagrams

Activity diagram merupakan suatu diagram yang digunakan untuk menggambarkan aliran proses usaha secara grafis, langkah-langkah dari suatu use-case atau logika dari suatu tingkah laku objek dan metode dari suatu sistem yang akan dibangun (Bentley, Whitten, 2007).

Node bulat bewarna hitam ditengah menunjukkan mulai dan proses akhir pesan. Sistem ini dibagi menjadi dua bagian yang terpisah untuk menunjukkan atau menyederhanakan proses-proses yang terjadi pada user maupun pada sistem. Berikut


(42)

merupakan aktivity diagram dalam penelitian ini yang ditunjukkan pada gambar 3.5 dibawah ini:


(43)

3.3.4 Flow chart Pembangkitan Kunci Algoritma ElGamal

Dibawah ini merupakan proses pembangkitan kunci dari algoritma FEAL dan ElGamal. Pembangkitan kunci dapat dilihat dari gambar 3.5 dibawah ini:

Gambar 3.5 Flowchart Pembangkitan Kunci Algoritma FEAL dan ElGamal

3.3.5 Flow chart Enkripsi Algoritma FEAL dan ElGamal

Pada proses ini setiap elemen pada Algoritma Hybrid FEAL dan ElGamal akan dijelaskan dimana kunci akan dibangkitkan dan dimodulokan dengan n. Hasil proses enkripsi berupa ciphertext. Gambar 3. 6 merupakan Enkripsi AlGoritma FEAL untuk medapatkan kunci Private ElGamal.


(44)

Gambar 3.6 Flowchart Enkripsi Algoritma FEAL

Pada proses pada gambar 3.6 merupakan proses dalam pengambilan kunci private dari algoritma ElGamal, Selanjutna maka akan di generate bilangan prima dalam pengambilan kunci public ElGamal, selanjutnya ciphertext FEAL dijadikan kunci private ElGamal. Untuk proses dapat dijelaskan pada gambar 3.7 dibawah ini:


(45)

Gambar 3.7 Flowchart Ekripsi Algoritma ElGamal

Dari gambar 3.7 Diatas dapat di jelaskan bahwa yang dilakukan pertama adalah input file teks yaitu dari ciphertext dari algoritma FEAL, setelah itu sistem akan menampilkan isi ciphetext. Sistem akan menampilkan kasil enkripsi berupa ciphertext dari algoritma ElGamal, proses enkripsi selesai, ciphertext ditampilkan.

3.3.6 Flow chart Dekripsi Algoritma FEAL dan ElGamal

Proses dekripsi merupakan pengembalian ciphertext ke plaintext (pesan asli). Untuk proses dekripsi dapat dijelaskan pada gambar 3.8 dibawah ini:


(46)

Gambar 3.8 Proses Dekripsi ElGamal

Pada gambar 3.8 dapat diketahui bahwa hasil dekripsi ElGamal diperoleh dari dekripsi dari ciphertext sebelumnya dan pengambilan ciphertext FEAL sebagai kunci private.

3.4Perancangan Sistem

Berdasrkan hasil analisis proses yang berlangsung dalam sistem diperoleh gambaran yang akan di implementasikan pada sistem. Berasarkan Gambaran ini dilakukan perancangan antarmuka pengguna dan perancangan, dimana akan diimplentasikan menggunakan bahasa pemograman.


(47)

3.4.1 Perancangan Antar Muka

Pada penelitian ini penulis mencoba menjadikan mozilla firefox sebagai tool yang digunakan untuk tampilan antarmuka dari program aplikasi. Pada aplikasi main page dapat dilihat pada gambar 3.9 dibawah ini:

Gambar 3.9 Halaman Utama Program Aplikasi

Berdasarkan gambar 3.9, dimana terdapat halaman utama dari program aplikasi yang dirancang. Selanjutnya, Untuk lebih jelasnya dapat dijelaskan pada tabel 3.4 dibawah ini :

Tabel 3.4 Deskripsi dari Halaman Utama No Nama Komponen Keterangan

1 Komponen ke-1 Yaitu Halaman identitas dari penulis 2 Komponen ke 2

Yaitu dimulainya program yang memuat tentang enkripsi dan Dekripsi dari Algoritma hybrid FEAL dan ElGamal

IMPLEMENTASI DAN ANALISIS KRIPTOGRAFI HYBRID ALGORITMA FEAL DAN ALGORITMA ELGAMAL

DALAM PENGAMANAN FILE TEKS SKRIPSI

SYABUL MAJID 131421058

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA

MEDAN 2015

START

1


(48)

BAB 4

IMPLEMENTASI DAN PENGUJIAN SISTEM

4.1 Implementasi Sistem

Setelah dilakukan analisis dan perancangan pada bab 3, proses selanjutnya adalah implementasi yang telah dibuat pada landasan matematik dan desain logika pada tahap sebelumnya di bab 3 tersebut.

Implementasi sistem merupakan hasil analisis dan perancangan sistem kedalam sebuah bahasa pemograman. Implementasi sistem pada penelitian tugas akhir ini dibangun menggunakan bahasa pemograman PHP. Bahasa PHP merupakan bahasa open source dan berjalan di web browser mozilla firefox.

4.1.1 Halaman Utama (Main Page)

Pada main page ini merupakan page yang pertama kali muncul saat aplikasi dijalankan. Halaman ini terdiri dari tools button yang sebagai jalan pintas dalam enkripsi dan dekripsi algoritma hybrid yaitu algoritma FEAL dan ElGamal. Halaman utama dapat dilihat dalam gambar 4.1 dibawah ini:


(49)

4.1.2 Form key Generator

Form key generator merupakan form untuk membangkitkan bilangan prima, p, g dan y. Dimana kita akan mendaptkan kunci public dan kunci private. Form ini dapat dilihat pada gambar 4.2 berikut ini:

Gambar 4.2 Key Generator algoritma ElGamal

4.1.3 Pengambilan kunci dari algoritma FEAL (Hasil proses enkripsi dan Hasil dekripsi algoritma FEAL)

a. Hasil Proses enkripsi algoritma FEAL

Pada proses ini akan algoritma FEAL melakukan enkripsi yang bertujuan untuk mengubah plaintext menjadi ciphertext. Pada proses ini algoritma FEAL juga melakukan enkripsi biasa yaitu memasukkan plaintext dan key kemudian menghasilkan output ciphertext. Pada enkripsi algoritma FEAL proses ini akan dijelaskan pada form yang dapat di perlihatkan pada gambar 4.3 dibawah ini:


(50)

Gambar 4.3 Proses enkripsi algoritma FEAL

Pada proses ini plaintext yaitu berupa karakter dalam bentuk kalimat “target januari 2016!” menghasilkan ciphertext berupa karakter

xACwCLvCjVbrMmlWYS/6SBwRBFdmyn6ERguy6w==” dimana jumlah karakter ciphertext lebih panjang dari plaintext.

b. Hasil Proses Dekripsi algoritma FEAL

Pada proses ini merupakan proses mengembalikan proses ciphertext menjadi plaintext pada algoritma FEAL. Pada proses ini walaupun pada ciphertext menghasilkan karakter yang berbeda-beda ketika di generate, namun decrypt akan menghasilkan karakter sama dengan plaintext sebelumnya asalkan key yang sebelumnya sama. Untuk proses dekripsi algoritma FEAL dapat dijelaskan pada gambar 4.4 berikut dibawah ini:


(51)

Gambar 4.4 Dekripsi pada algoritma FEAL

4.1.4 Implementasi dan pengujian Algoritma Hybrid FEAL dan ElGamal (Hasil Proses Enkripsi dan Hasil Dekripsi algoritma ElGamal dengan mengambil ciphertext FEAL sebagai Key ElGamal)

a. Proses Enkripsi algoritma Elgamal dengan key ciphertext FEAL sebagai key private FEAL

Pada proses ini algoritma ini algoritma ElGamal membutuhkan ciphertext FEAL sebagai kunci private ElGamal, maka berdasarkan kasus ini ditarik kesimpulan bahwa Hybrid Cryptosistem dimana menggabung dua algoritma enkrispi simetris (algoritma FEAL) menjadi key algoritma ElGamal. Untuk implementasi dalam sistem dapat dilihat dalam gambar 4.5 dibawah ini:


(52)

Gambar 4.5 Enkripsi Algoritma ElGamal

Berasarkan gambar maka dapat dikatui bahwa key ciphertxt algoritma FEAL diambil untuk menjadi private key algoritma ElGamal. Dimana ciphertext pada (sub bab 4.1.3 point a) dengan ciphertext

xACwCLvCjVbrMmlWYS/6SBwRBFdmyn6ERguy6w==

menjadi key algoritma ElGamal. Elgamal sebagai kunci asimetris yang memiliki kunci public dan kunci private maka kunci private diambil dari ciphertext algoritma FEAL penggabungan hal ini penulis sebut sebagai hybrid cryptosystem

.

Dalam ciphertext ElGamal maka dapat di sajikan ciphertex dalam bentuk decimal yaitu:

“669 598 669 231 669 45 669 623 669 1377 669 1367 669 457 669 814 669 447 669 1196 669 437 669 35 669 251 669 638 669 995 669 231 669 834 669 45 669 1196 669 1407 669 1176 669 50 669 1387 669 1216 669 809 669 437 669 603 669 1216 669 1362 669 824 669 603 669 598 669 613 669 1397 669 236 669 1216 669 1206 669 241 669 990 669 990”.


(53)

b. Proses Dekripsi algoritma Elgamal dengan key ciphertext FEAL sebagai key private FEAL

Pada proses dekripsi yaitu pembalikan ciphertext menjadi plaintext. Dalam Hybrid Cryptosystem dalam penelitian tugas akhir ini yaitu dimasukkan key FEAL dan dilakukan Generate Decrypt algoritma ElGamal. Untuk hasil proses decryption maka dapat dilihat dalam gambar 4.6 dan 4.7 berikut dibawah ini:

Contoh 1:

Gambar 4.6 Dekripsi ElGamal dengan menggunakan Hybrid FEAL

Dari pengujian dan bersarkan gambar diatas maka dapat disimpulkan bahwa plaintext ElGamal yang yaitu ciphertxt FEAL merupakan karakter yang sama dengan plaintext FEAL yaitu:


(54)

Contoh 2:

Contoh dekripsi algoritma ElGamal dengan menggunakan Key Algoritma FEAL pada

(sub bab 4.3 point a yaitu “12345”)

Gambar 4.7 proses Dekripsi Algoritma ElGamal contoh ke-2

Pada gambar 4.7 diatas merupakan generate decrypt dari algoritma ElGalam dengan menggunakan key FEAL “12345” mengasilkan ciphertext

“669 834 669 251 669 452 669 1397 669 1015 669 834 669 20 669 447 669 251 669 1211 669 1025 669 251 669 452 669 256 669 20 669 412 669 30 669 221 669 1176 669 211”


(55)

4.2Hasil Implementasi Sistem

4.2.1 Uji coba panjang kunci dan panjang karakter plaintext proses enkripsi dan dekripsi algoritma FEAL dan ElGamal

a. Uji ke-1 (time 0.858 s)

Uji ke-1 dilakukan dengan panjang karakter sebanyak 40 karakter dan panjang kunci 10 dengan plaintext “syabrul majid ekstensi ilmu komputer usu” dan key yaitu “1234567890” yaitu dapat dilihat pada gambar 4.8 berikut dibawah ini:

Gambar 4.8 Hasil pengujian ke-1 mengambil mendapatkan ciphertext FEAL untuk Key ElGamal dengan panjang plaintext 40 dan panjang key 10

Setelah mendapatkan ciphertext FEAL maka selanjutnya dijadikan Key ElGamal. Dapat dilihat pada gambar 4.9 berikut dibawah ini:


(56)

Gambar 4.9 Pengujian ElGamal dengan mendapatkan key dari algoritma FEAL time 0.858s

b. Uji ke-2 (time 1.899 s)

Uji ke-2 dilakukan dengan panjang karakter sebanyak 91 karakter dan panjang kunci 21 dengan plaintext “syabrul majid ekstensi ilmu komputer usu tahun 2013 dengan Nomor Induk Mahasiswa 131421058” dan key yaitu “1234567890qwertyuiopa” yaitu dapat dilihat pada gambar 4.10 berikut dibawah ini:

Gambar 4.10 Hasil pengujian ke-1 mengambil mendapatkan ciphertext FEAL untuk Key ElGamal dengan panjang plaintext 91 dan panjang key 21


(57)

Setelah mendapatkan ciphertext FEAL maka selanjutnya dijadikan Key ElGamal. Dapat dilihat pada gambar 4.11 berikut dibawah ini:

Gambar 4.11 Pengujian ElGamal dengan mendapatkan key dari algoritma FEAL time 1.899s

c. Uji ke-3 (time 5.097s)

Uji ke-3 dilakukan dengan panjang karakter sebanyak 193 karakter dan panjang kunci 51 dengan plaintext

“syabrul majid ekstensi ilmu komputer usu tahun 2013 dengan Nomor Induk

Mahasiswa 131421058 dengan judul skripsi "IMPLEMENTASI DAN ANALISIS KRIPTOGRAFI HYBRID ALGORITMA FEAL DAN ALGORITMA ELGAMAL DALAM PENGAMANAN FILE TEKS tahun 2016 medan"” dan key yaitu “1234567890qwertyuiopasdfghjklzxcvbnmasdfgghjklzxcvb” yaitu dapat dilihat pada gambar 4.12 berikut dibawah ini:


(58)

Gambar 4.12 Hasil pengujian ke-1 mengambil mendapatkan ciphertext FEAL untuk Key ElGamal dengan panjang plaintext 193 dan panjang key 51

Setelah mendapatkan ciphertext FEAL maka selanjutnya dijadikan Key ElGamal. Dalam proses enkripsi, dapat dilihat pada gambar 4.13 berikut dibawah ini:

Gambar 4.13 Pengujian ElGamal dengan mendapatkan key dari algoritma FEAL time 5.097s


(59)

d. Uji ke-4 (time 7.758 s)

Uji ke-4 dilakukan dengan panjang karakter sebanyak 366 karakter dan panjang kunci 51 dengan plaintext

“syabrul majid ekstensi ilmu komputer usu tahun 2013 dengan Nomor Induk Mahasiswa 131421058 dengan judul skripsi "IMPLEMENTASI DAN ANALISIS KRIPTOGRAFI HYBRID ALGORITMA FEAL DAN ALGORITMA ELGAMAL DALAM PENGAMANAN FILE TEKS tahun 2016 medan" Dosen Pembimbing 1. Bapak Muhammad M. Andri Budiman, ST, MCompSc, MEM dan dosen Pembimbing 2.

Ibu Dian Rachmawati, S.Si, M.Kom” dan key yaitu

“1234567890qwertyuiopasdfghjklzxcvbnmasdfgghjklzxcvb” yaitu dapat dilihat pada gambar 4.14 berikut dibawah ini:

Gambar 4.14 Hasil pengujian ke-1 mengambil mendapatkan ciphertext FEAL untuk Key ElGamal dengan panjang plaintext 329 dan panjang key 51

Setelah mendapatkan ciphertext FEAL maka selanjutnya dijadikan Key ElGamal. Dalam proses enkripsi, dapat dilihat pada gambar 4.13 berikut dibawah ini:


(60)

Gambar 4.15 Pengujian ElGamal dengan mendapatkan key dari algoritma FEAL time 7.758s

e. Uji ke-5 (time 23.829s)

Uji ke-5 dilakukan dengan panjang karakter sebanyak 1135 karakter dan panjang kunci 70 dengan plaintext

Lalu lintas pengiriman data semakin global, serta konsep open system dari suatu jaringan memudahkan seseorang untuk masuk kedalam jaringan tersebut. Hal itu membuat proses pengiriman data menjadi tidak aman dan dapat saja dimanfaatkan oleh pihak yang tidak memiliki wewenang dan tanggung jawab. Salah satu solusi dengan teknik kriptografi adalah untuk menjaga keamanan dan kerahsiaan data dalam pengiriman dan bertukar informasi. Algoritma FEAL (Fast Data Enchiperment Algorithm) adalah algoritma kunci simetri. Algoritma ElGamal adalah algoritma dengan kunci asimetri. Pengujian bilangan prima menggunakan metode Lehmann (Lehmann Prime Generator). Penggabungan dua algoritma simetri dengan asimetri disebut juga dengan hybrid cryptosystem. Implementasi menggunakan bahasa pemograman PHP dengan editor notepad++ berjalan di browser Mozilla Firefox. Hasil penelitian menunjukkan bahwa gabungan dari kedua algoritma tersebut dapat menjaga keamanan dan kerahasiaan data.


(61)

Kata Kunci : Kriptografi, simetris, asimetris, FEAL (Fast Data Enchiperment Algorithm),

ElGamal, Hybrid Cryptosystem, Lehmann Prime Generator

dan key yaitu “1234567890qwertyuiopasdfghjklzxcvbnmasdfgghjklzxcvb” yaitu dapat dilihat pada gambar 4.14 berikut dibawah ini:

Gambar 4.16 Hasil pengujian ke-1 mengambil mendapatkan ciphertext FEAL untuk Key ElGamal dengan panjang plaintext 329 dan panjang key 51


(62)

Setelah mendapatkan ciphertext FEAL maka selanjutnya dijadikan Key ElGamal. Dalam proses enkripsi, dapat dilihat pada gambar 4.13 berikut dibawah ini:

Gambar 4.17 Hasil pengujian ke-1 mengambil mendapatkan ciphertext FEAL untuk Key ElGamal dengan panjang plaintext 1135 dan panjang key 51

Hasil Uji coba implentasi dari algoritma Hybrid FEAL dan ElGamal dapat diketahui dari melihat tabel 4.1berikut dibawah ini:

Tabel 4.1 Hasil ujicoba Enkripsi dari 5 kali percobaan dengan beragam panjang key dan plaintext

Uji coba ke- Panjang Plaintext (karakter) Panjang key Waktu / s

1 40 10 0.858

2 91 21 1.899

3 193 51 5.097


(63)

5 1.135 51 23.829

Dapat dilihat dari gambar 4.15 dalam bentuk diagram garis dibawah ini:

Gambar 4.18 Tingkatan jumlah panjang karakter dalam Algoritma Hybrid FEAL dan ElGamal

Dari diagram diatas dapat diketaui bahwa semakin panjang karakter plaintex dan key maka waktu yang dibutuhkan semakin lama. Begitupun juga untuk dekripsi pesan dalam pengamanan data Hybrid Cryptosystem Algoritma FEAL dan ElGamal. Dimana semakin panjang key dan plaintext yang dimasukkan maka waktu yang dibutuhkan akan semakin lama yaitu dapat dilihat pada gambar 4.18 diatas dimana jumlah waktu dengan plaintext terlihat signifikan. Waktu dalam 1135 karakter pesan termasuk spasi membutuhkan waktu 23.82 Sekon , berbeda dengan plaintext yang hanya 91 karakter hanya membutuhkan waktu 1.899 Sekon.


(64)

BAB 5

KESIMPULAN DAN SARAN

5.1 Kesimpulan

1. Algoritma kriptografi FEAL merupakan sebuah metode penyandian data dengan algoritma simetris, sedangkan algoritma algoritma ElGamal merupakan gabungan antara algoritma simetris dan asimetris dengan memakai FEAL sebagau kunci dari ElGamal maka disebut hybrid Cryptosystem.

2. FEAL menerima masukan berupa 64-bit plaintext dan 64-bit kunci, dan menghasilkan 64-bit ciphertext. FEAL memiliki fungsi f yang sederhana, dengan menggunakan operasi XOR didalamnya, hal ini membuat FEAL menjadi algoritma sederhana dan memiliki proses yang cepat. Sedangkan proses dekripsi yang terjadi pada FEAL menggunakan proses yang sama dengan proses enkripsi.

3. Semakin panjang ukuran dan file yang di enkripsi semakin besar berpengaruh terhadap waktu dalam enkripsi dan dekripsinya. Satuan waktu yang digunakan dalam skripsi ini adalah satuan waktu dalam sekon/detik.

4. Dalam tugas akhir ini perancangan aplikasi telah mampu memenuhi syarat dan kelayakan dalam enkripsi Hybrid Algoritma FEAL dan ElGamal, serta mampu dalam proses enkripsi dan dekripsi pesan baik berupa karakter maupun berupa dokumen *txt, *rtf.

5. Dalam aplikasi yang telah dibangun file teks yang telah dilakukan enkripsi menjadi cipherteks khususnya dalam algoritma FEAL sebagi kunci memiliki panjang karakter yang lebih panjang dari plaintext, dan digunakan dalam key untuk Algoritma ElGamal. Dan dalam Algoritma dibagi menjadi Blok-blok yang berupa bilangan desimal.

6. Semakin panjang plaintext baik berupa karakter maupun file teks berupa *.txt, *rtf, maka waktu yang dibutuhkan semakin banyak.


(65)

5.2 Saran

Saran-saran yang ingin disampaikan oleh penulis setelah menyelesaikan penelitian sederhana dalam skripsi ini adalah sebagai berikut:

1. Sebaiknya mengadakan penilitian lebih lanjut tentang perfomasi kekuatan dari Hybrid FEAL dan ElGamal.

2. Aplikasi ini berupa pesan teks, bagi yang ingin mengembangkan aplikasi lebih

lanjut penulis berharap dikembangkan dalam bentuk image seperti “*.png, *.jpg, *.bmp”. Maupun teks yang memiliki ukuran lebih besar seperti *.pdf.

3. Key enkripsi dalam aplikasi ini hanya sekali pakai maka, sebaiknya ditambah fasilitas penyimpanan key, sehingga key-key yeng telah dipakai memiliki history sendiri.


(1)

DAFTAR ISI

Halaman Judul ... i

Halaman Persetujuan... ii

Halaman Pernyataan ... iii

Halaman Pernyataan ... iv

Halaman Penghargaan ... vi

Halaman Abstak ... viii

Halaman Abstact ... ix

Halaman Daftar Isi ... x

Halaman Daftar Tabel ... xv

Halaman Daftar Gambar ... xvi

BAB 1 PENDAHULUAN ... 1

1.1 latar Belakang ... 1

1.2 Rumusan Masalah ... 2

1.3 Batasan Masalah ... 2

1.4 Tujuan Penelitian ... 2

1.5 Manfaat Penelitian ... 3

1.6 Metode Penelitian ... 3

1.7 Sistematika Penelitian ... 4

BAB 2 TINJAUAN PUSTAKA ... 6

2.1 Latar Belakang ... 6

2.1.1 Pengertian Kriptografi ... 6

2.1.2 Jenis Kriptografi ... 7

2.1.2 Tujuan Kriptografi ... 10

2.1.2 Serangan Terahadap Kriptografi ... 11


(2)

2.2 Algoritma Hibrida (hybrid Algorithm)... 15

2.2.1 Pretty Good Privacy (PGP) ... 16

2.3 Lehmann primary Test (Tes Keprimaan Lehmann) ... 18

2.4 Algoritma FEAL (Fast Data Enchiperment Algorithm ... 20

2.4.1 Sejarah dan Penjelasan Algoritma FEAL ... 22

2.4.2 Langkah Enkripsi Algoritma FEAL ... 23

2.4.3 Proses Validasi (key Schedule) Algoritma FEAL ... 25

2.4.4 Proses Dekripsi Algoritma FEAL ... 25

2.5 Algoritma ElGamal ... 26

2.5.1 Landasan Matematika Algoritma ElGamal ... 27

2.5.2 Prinsip Kerja Algoritma ElGamal ... 32

2.5.3 Enkripsi Algoritma ElGamal ... 33

2.5.4 Dekripsi Algoritma ElGamal ... 37

BAB 3 ANALISIS DAN PERANCANGAN SISTEM ... 39

3.1 Analisis Sistem ... 39

2.1 Analisis Masalah ... 39

3.2.1 Analisis Persyaratan (requirement Analysis) ... 40

3.3 Analisis Proses ... 41

3.3.1 Proses Sistem Dengan Use Case Diagram ... 41

3.3.2 Proses Sistem Dengan Sequence Diagram ... 47

3.3.3 Proses Sistem Dengan Activity Diagram ... 48

3.3.4 Flowchart Enkripsi Algoritma FEAL dan ElGamal ... 49

3.3.4 Flowchart Dekripsi Algoritma FEAL dan ElGamal ... 50

3.3 Perancangan Sistem ... 51

3.3.1 Perancangan Antar Muka ... 51

BAB 4 IMPLENTASI DAN PENGUJIAN SISTEM ... 54

4.1 Implementasi Sistem ... 54

4.1.1 Halaman Utama (Main Page) ... 54

4.1.2 Form Key Generator ... 55

4.1.3 Pengambilan Kunci dari Algoritma FEAL (Hasil Enkripsi dan Dekripsi Algoritma FEAL ... 55


(3)

4.1.4 Implementasi dan pengujian Algoritma Hybrid FEAL dan ElGamal (Hasil Proses Enkripsi dan Hasil Dekripsi algoritma ElGamal

dengan mengambil ciphertext FEAL sebagai Key ElGamal)... 57 4.2 Hasil Implementasi Sistem ... 61 4.2.1 Hasil Ujicoba panjang kunci dan panjang karakter plaintext proses enkripsi dan dekripsi Algoritma Hybrid FEAL dan ElGamal . 61

BAB 5 KESIMPULAN DAN SARAN ... 70 5.1 Kesimpulan ... 70 5.2 Saran ... 71

DAFTAR PUSTAKA


(4)

DAFTAR TABEL

Tabel 2.1 Teknik Subtitusi ... 13

Tabel 2.2 Teknik Blocking ... . 14

Tabel 2.3 Sistem Kriptografi Algoritma FEAL ... 24

Tabel 2.4 Inversi Modulo dari 7 mod 17 ... 30

Tabel 2.5 Inversi Modulo dari 25 mod 31 ... 31

Tabel 2.6 Perhitungan Bilangan Prima Aman Algoritma ElGamal ... 33

Tabel 2.7 Blok Cipher Algoritma ElGamal dalam Bentuk ASCII ... 35

Tabel 2.8 Pembentukan ciphertext Algoritma ElGamal dalam Bentuk ASCII .. 36

Tabel 2.9 Dekripsi Pengembalian Cipertext kedalam bentuk plaintext algoritma ElGamal ... 39

Tabel 3.1 Dokumentasu naratif program enkripsi dan dekripsi algoritma FEAL dan ElGamal ... 43

Tabel 3.2 Proses Pembangkitan kunci ... 44

Tabel 3.3 Proses Enkripsi ElGamal ... 45

Tabel 3.4 Deskripsi Dari Halaman Utama ... 53

Tabel 4.1 Uji Coba Enkripsi 5 kali percobaan dengan beragam panjang key dan plaintext Subtitusi ... 68


(5)

DAFTAR GAMBAR

Gambar 2.1 Enkripsi dan dekripsi Simetric Cryptosystem... 8

Gambar 2.2 Enkripsi dan dekripsi Asimetric Cryptosystem ... 10

Gambar 2.3 Teknik Permutasi ... 15

Gambar 2.4 TeknikPermutasi ... 15

Gambar 2.5 Teknik Ekpansi ... 16

Gambar 2.6 Teknik Pemampatan ... 17

Gambar 2.7 Proses Enkripsi Pada PGP ... 19

Gambar 2.8 Proses dekripsi Pada PGP ... 20

Gambar 2.9 Diagram Alir Algoritma FEAL ... 23

Gambar 2.10 Sistem kriptografi proses pembentukan kunci, enkripsi dekripsi ElGamal ... 27

Gambar 2.11 Elemen Primitive Algoritma ElGamal ... 32

Gambar 2.12 Pembangkitan Kunci algoritma ElGamal ... 33

Gambar 2.13 Proses Enkripsi ElGamal ... 35

Gambar 2.14 Proses Dekkripsi Pada PGP ... 36

Gambar 3.1 Diagram Ichikawa pada implementasi Algoritma Hybrid FEAL dan ElGamal dalam pengaman data teks ... 40

Gambar 3.2 Use Case Algoritma hybrid FEAL dan ElGamal ... 42

Gambar 3.3 Proses Enkripsi dan Dekripsi dengan sequence diagram algoritma Hybrid FEAL dan ElGamal ... 47

Gambar 3.4 Diagram Activity Pembangkitan kunci ... 47

Gambar 3.5 Diagram Activity Proses enkripsi dan dekripsi ... 48

Gambar 3.6 Flowchart Pembangkitan Kunci Algoritma FEAL dan ElGamal ... 49

Gambar 3.7 Flowchart enkripsi Algoritma FEAL... 50

Gambar 3.8 Flowchart enkripsi Algoritma ElGamal... 51

Gambar 3.9 Halaman Utama Program Aplikasi... 53

Gambar 4.1 Halaman utama Aplikasi kriptografi Hybrid FEAL dan ElGamal .... 54

Gambar 4.2 Key Generator Algoritma ElGamal ... 55


(6)

Gambar 4.4 Dekripsi Algoritma FEAL ... 57

Gambar 4.5 Ekripsi Algoritma ElGamal ... 58

Gambar 4.6 Dekripsi Algoritma FEAL ... 59

Gambar 4.7 Dekripsi Algoritma ElGamal menggunakan hybrid FEAL ... 60

Gambar 4.8 Hasil pengujian ke-1 mendapatkan ciphertext FEAL untuk key ElGamal Dengan panjang plaintext 40 dan panjang key 10... 61

Gambar 4.9 Pengujian ELGamal dengan mendapatkan key dari algoritma FEAL . 62 Gambar 4.10 Hasil pengujian ke-2 mendapatkan ciphertext FEAL untuk key ElGamal Dengan panjang plaintext 91 dan panjang key 21... 62

Gambar 4.11 Pengujian ELGamal dengan mendapatkan key dari algoritma FEAL 63 Gambar 4.12 Hasil pengujian ke-1 mendapatkan ciphertext FEAL untuk key ElGamal Dengan panjang plaintext 193 dan panjang key 21... 64

Gambar 4.13 Pengujian ELGamal dengan mendapatkan key dari algoritma FEAL. 64 Gambar 4.14 Hasil pengujian ke-1 mendapatkan ciphertext FEAL untuk key ElGamal Dengan panjang plaintext 329 dan panjang key 51... 64

Gambar 4.15 Pengujian ELGamal dengan mendapatkan key dari algoritma FEAL. 66 Gambar 4.16 Hasil pengujian ke-1 mendapatkan ciphertext FEAL untuk key ElGamal Dengan panjang plaintext 1135 dan panjang key 51... 67

Gambar 4.17 Pengujian ELGamal dengan mendapatkan key dari algoritma FEAL.68 Gambar 4.18 Tingkatan jumlah panjang karakter dalam Algoritma Hybrid FEAL dan ElGamal ... 69