110 lines
3.5 KiB
PHP
110 lines
3.5 KiB
PHP
<?php
|
|
if ($_SERVER['REQUEST_METHOD'] == "POST") // Cek apakah halaman diload melalui metode POST?
|
|
{
|
|
include "functions.php"; // Untuk fungsi produce_error
|
|
|
|
$inputPlainText = strip_tags($_POST['plaintext']);
|
|
if (empty($inputPlainText)) // Cek apakah ada plaintext?
|
|
{
|
|
produce_error("Input plaintext masih kosong");
|
|
return;
|
|
}
|
|
|
|
$inputKey = strip_tags($_POST['key']);
|
|
if (empty($inputKey)) // Cek apakah ada kunci?
|
|
{
|
|
produce_error("Input kunci masih kosong");
|
|
return;
|
|
}
|
|
$plainTextLength = strlen($inputPlainText); // ambil panjang karakter plaintext
|
|
$keyLength = strlen($inputKey); // ambil panjang kunci
|
|
|
|
if (preg_match("/[^a-zA-Z]/",$inputPlainText) || preg_match("/[^a-zA-Z]/",$inputKey)) // Jika ada karakter selain alphabet
|
|
{
|
|
produce_error("Terdapat karakter selain alphabet");
|
|
return;
|
|
}
|
|
// Tampilkan struktur dasar HTML
|
|
echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3c.org/TR/html4/loose.dtd\">\n";
|
|
echo "<html>\n";
|
|
echo "<head>\n";
|
|
echo "<title>Willy Sudiarto Raharjo - Tugas 2 Keamanan Komputer - Semester Gasal 2016/2017</title>\n";
|
|
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
|
|
echo "<meta name=\"author\" content=\"Willy Sudiarto Raharjo\">\n";
|
|
echo "<style type=\"text/css\">\n";
|
|
echo "@import url(index.css);\n";
|
|
echo "</style>\n";
|
|
echo "</head>\n";
|
|
echo "<body>\n";
|
|
echo "<div class=\"Result-Title\">\n";
|
|
echo "Hasil Enkripsi: \n";
|
|
echo "</div>\n";
|
|
$resultingCipherText = "";
|
|
echo "plaintext: $inputPlainText<br/>";
|
|
echo "kunci: $inputKey<br/>";
|
|
/*
|
|
/* Pergeseran sebanyak panjang kunci
|
|
*/
|
|
for ($i = 0; $i < $keyLength; $i++)
|
|
{
|
|
/*
|
|
/* Jika loop pertama, gunakan input awal
|
|
/* Jika bukan loop pertama, gunakan hasil perhitungan sebelumnya
|
|
*/
|
|
if ($i == 0)
|
|
{
|
|
$originalPlainText = $inputPlainText;
|
|
}
|
|
else
|
|
{
|
|
$originalPlainText = $resultingCipherText;
|
|
}
|
|
|
|
/*
|
|
/* Jumlah pergeseran dari karakter ke-i dari kunci
|
|
/* Hasilnya dikurangi 97 karena karakter a kode ASCInya 97
|
|
/* Kita ingin a = 0, b = 1, c = 2, dst
|
|
*/
|
|
$numberOfMovement = ord($inputKey[$i]) - 97;
|
|
|
|
echo "Karakter ke-" . ($i+1) . " kunci - ";
|
|
|
|
/*
|
|
/* Pergeseran sebanyak panjang plaintext
|
|
*/
|
|
for ($j = 0; $j < $plainTextLength; $j++)
|
|
{
|
|
/*
|
|
/* Algoritma:
|
|
/* 1. Ambil kode ASCII dari teks menggunakan fungsi ord
|
|
/* 2. Konversi ke bilangan 0 - 25 dengan mengurangi 97
|
|
/* 3. Tambahkan jumlah pergeseran dari karakter ke-i dari kunci
|
|
/* 4. Pastikan hasilnya diantara 0-25 dengan cara modulus 26
|
|
/* 5. Kembalikan hasilnya ke karakter ASCII dengan fungsi chr
|
|
*/
|
|
$originalPlainText[$j] = chr((((ord($originalPlainText[$j]) - 97) + $numberOfMovement) % 26) + 97);
|
|
echo $originalPlainText[$j];
|
|
}
|
|
echo "<br/>\n";
|
|
/*
|
|
/* Simpan hasilnya ke variabel resultingCipherText untuk nilai awal loop berikutnya
|
|
*/
|
|
$resultingCipherText = $originalPlainText;
|
|
}
|
|
echo "ciphertext: <strong>$resultingCipherText</strong>";
|
|
echo "<div class=\"Link\">\n";
|
|
echo ":: <a href=\"index.php\" class=\"url\">Kembali ke halaman input</a> ::\n";
|
|
echo "</div>\n";
|
|
echo "<div class=\"Info\">\n";
|
|
echo "Willy Sudiarto Raharjo\n";
|
|
echo "</div>\n";
|
|
echo "</body>\n";
|
|
echo "</html>\n";
|
|
}
|
|
else // Jika ternyata diakses melalui metode GET (kemungkinan besar pemanggilan langsung)
|
|
{
|
|
header("location:index.php"); // Redirect ke halaman input
|
|
exit; // hanya memastikan bahwa tidak menjalankan perintah lain
|
|
}
|
|
?>
|