• Tidak ada hasil yang ditemukan

Pengamanan File Teks Dengan Skema Hybrid Menggunakan Algoritma Enigma Dan Algoritma Rabin-Williams

N/A
N/A
Protected

Academic year: 2017

Membagikan "Pengamanan File Teks Dengan Skema Hybrid Menggunakan Algoritma Enigma Dan Algoritma Rabin-Williams"

Copied!
11
0
0

Teks penuh

(1)

LISTING PROGRAM

Form Utama :

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Windows.Forms;

namespace

program_skripsi_rabin

{

public partial class MainPage : PhoneApplicationPage {

void EnkripsiToolStripMenuItemClick(objectsender,EventArgs e) {

enkripsi pindah = new enkripsi(); pindah.Show();

this.Hide(); }

void MenuToolStripMenuItemClick(objectsender,EventArgs e) {

bangkit_kunci pindah = new bangkit_kunci(); pindah.Show();

this.Hide(); }

Void DekripsiToolStripMenuItemClick(object sender, EventArgs e)

{

Dekripsi pindah = new Dekripsi(); pindah.Show();

this.Hide(); }

void MainFormLoad(object sender, EventArgs e) {

}

void TentangToolStripMenuItemClick(object sender, EventArgs e)

{

Form1 pindah = new Form1(); pindah.Show(); this.Hide(); }

} }

Form Generate Key :

using System;

using System.Drawing;

(2)

namespace program_skripsi_rabin

public partial class bangkit_kunci : Form {

int p,q,n; long d;

Random r = new Random(); public bangkit_kunci() {

public UInt64 sma(UInt64 x, UInt64 H, UInt64 n) {

UInt64 r;

int[] bin = new int[32]; int i;

r = x; i = 0; /* ubah H ke Biner */

while( H > 0 ) {

if (H % 2 == 0) {

bin[i] = 0; }

else {

bin[i] = 1; }

H = H/2; i++; }

i--;

while(i>0) {

r = (r * r) % n; if( bin[--i] == 1 ) {

r = (r * x) % n; }

}

return r; }

public Int64 modInverse(Int64 a, Int64 n) {

Int64 i = n, v = 0, d = 1; while (a>0)

{

Int64 t = i/a, x = a; a = i % x;

i = x; x = d;

d = v - t*x; v = x;

}

v %= n; if (v<0)

v = (v+n)%n; return v;

(3)

public int lehmann(int n) {

int a = 0,i = 0; UInt64 l;

for(i=1;i<=2;i++) {

a = r.Next(2,n-2);

l =

sma(Convert.ToUInt64(a),Convert.ToUInt64(((n-1)/2)),Convert.ToUInt64(n));

if (l != 1) {

break; }

}

if(i == 2) return n; else

return lehmann(r.Next(4,99)); }

void Button1Click(object sender, EventArgs e) {

p = 0; q = 0; n = 0; cari :

p = lehmann(r.Next(4,99)); q = lehmann(r.Next(4,99)); n = p*q;

d = modInverse(3,((p-1)*(q-1))); if (p != q && d !=1)

{

textBox1.Text = p.ToString(); textBox2.Text = q.ToString(); textBox3.Text = n.ToString(); textBox4.Text = d.ToString(); }

else {

goto cari; }

}

void Button3Click(object sender, EventArgs e) {

SaveFileDialog simpan = new SaveFileDialog(); simpan.Filter = "key Files( *.key)|*.key"; simpan.FileName = "*.key";

if (simpan.ShowDialog() == DialogResult.OK) {

string

filename=simpan.FileName.Substring(0,simpan.FileName.Length- 3) + "pubkey";

FileStream fstream=new

FileStream(filename,FileMode.Create);

StreamWriter sw = new StreamWriter(fstream); SeekOrigin seekorigin = new SeekOrigin(); sw.BaseStream.Seek(0, seekorigin);

(4)

sw.Flush(); sw.Close(); string

filenamee=simpan.FileName.Substring(0,simpan.FileName.Length- 3) + "privkey";

FileStream fstreamm=new

FileStream(filenamee,FileMode.Create);

StreamWriter sww = new StreamWriter(fstreamm); SeekOrigin seekoriginn = new SeekOrigin(); sww.BaseStream.Seek(0, seekoriginn);

sww.Write(textBox3.Text+"~"+textBox4.Text+"~"); sww.Flush();

sww.Close();

MessageBox.Show("kunci berhasil disimpan"); MainForm pindah = new MainForm();

pindah.Show(); this.Hide(); }

} }

}

Form Enkripsi Pesan :

using System;

using System.Drawing;

using System.Windows.Forms; using System.IO;

namespace program_skripsi_rabin {

public partial class enkripsi : Form {

string kunciEnigma; int n;

double[] chipkunci; public enkripsi() {

void Button3Click(object sender, EventArgs e) {

textBox4.Text = null;

kunciEnigma = textBox2.Text;

n = Convert.ToInt32(textBox3.Text);

chipkunci = new double[kunciEnigma.Length]; for(int i=0; i< chipkunci.Length; i++) {

chipkunci[i] =

Math.Pow(Convert.ToInt32(kunciEnigma[i]),3) % n; }

for (int i = 0; i <chipkunci.Length; i++) {

textBox4.Text += chipkunci[i] + ","; }

}

void DekripsiToolStripMenuItemClick(object sender, EventArgs e)

{

(5)

pindah.Show(); this.Hide(); }

void MenuToolStripMenuItemClick(object sender, EventArgs e)

{

bangkit_kunci pindah = new bangkit_kunci(); pindah.Show();

this.Hide(); }

void EnkripsiToolStripMenuItemClick(object sender, EventArgs e)

{

enkripsi pindah = new enkripsi(); pindah.Show();

this.Hide(); }

void Button1Click(object sender, EventArgs e) {

textBox3.Text = null; try

{

OpenFileDialog open = new OpenFileDialog(); open.Filter = "public key( *.pubkey)|*.pubkey";

if (open.ShowDialog() == DialogResult.OK) {

string nama =

open.FileName.Substring(0, open.FileName.Length);

FileStream fstream = new FileStream(nama, FileMode.Open,FileAccess.ReadWrite);

StreamReader sreader = new StreamReader(fstream);

sreader.BaseStream.Seek(0, SeekOrigin.Begin);

string keterangan = sreader.ReadToEnd();

textBox3.Text = keterangan; sreader.Close();

} }

catch (Exception ex) {

MessageBox.Show(ex.ToString()); }

}

void Button2Click(object sender, EventArgs e) {

System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew();

richTextBox2.Text =

Enigma.crypt(richTextBox1.Text,textBox2.Text);

MessageBox.Show("Waktu : " + sw.Elapsed.Milliseconds.ToString() + " ms");

(6)

void Button5Click(object sender, EventArgs e) {

SaveFileDialog simpan = new SaveFileDialog(); simpan.Filter = "Enigma file( *.Enigma)|*.Enigma";

simpan.FileName = "*.Enigma";

if (simpan.ShowDialog() == DialogResult.OK) {

FileStream fstream=new FileStream(simpan.FileName,FileMode.OpenOrCreate);

StreamWriter sw = new StreamWriter(fstream);

SeekOrigin seekorigin = new SeekOrigin();

sw.BaseStream.Seek(0, seekorigin); sw.Write(richTextBox2.Text);

sw.Flush(); sw.Close(); }

}

void Button4Click(object sender, EventArgs e) {

SaveFileDialog simpan = new SaveFileDialog(); simpan.Filter = "Rabin-William file( *.rw)|*.rw";

simpan.FileName = "*.rw";

if (simpan.ShowDialog() == DialogResult.OK) {

FileStream fstream=new FileStream(simpan.FileName,FileMode.OpenOrCreate);

StreamWriter sw = new StreamWriter(fstream);

SeekOrigin seekorigin = new SeekOrigin();

sw.BaseStream.Seek(0, seekorigin); sw.Write(textBox4.Text);

sw.Flush(); sw.Close(); }

} }

}

Class

Enigma

.cs :

using System;

using System.Runtime.InteropServices;

namespace program_skripsi_rabin {

public class Enigma {

public static string output;

public static string alpha =

"ABCDEFGHIJKLMNOPQRSTUVWXYZ";

(7)

"EKMFLGDQVZNTOWYHXUSPAIBRCJ", "AJDKSIRUXBLHWTMCQGZNPYFVOE", "BDFHJLCPRTXVZNYEIWGAKMUSQO"

};

public static string reflector = "YRUHQSLDPXNGOKMIEBFZCWVJAT";

public static int mod26(int a) {

return (a%26+26)%26; }

public static int li (char l) {

// index huruf return l - 'A';

}

public static int indexof (string array, char find) {

return array.IndexOf(find); }

public static string crypt (string ct, string key) {

// atur permutasi int L = li(key[0]); int M = li(key[1]); int R = li(key[2]);

output = null;

for ( int x = 0; x < ct.Length ; x++ )

{

int ct_letter = li(ct[x]);

// Langkah rotor kanan pada setiap iterasi R = mod26(R + 1);

// Langkah rotor tengah jika rotor kanan == W (22) if(R==22)

M = mod26(M + 1);

// Langkah rotor kiri jika rotor kanan == W (22) dan juga rotor tengah == F (5)

if(R==22 && M==5)

L = mod26(L + 1); // Melewati rotor

char a = alpha[mod26(li(rotors[2][mod26(R + ct_letter)]) - R)];

char b = alpha[mod26(li(rotors[1][mod26(M + li(a))]) - M)];

char c = alpha[mod26(li(rotors[0][mod26(L + li(b))]) - L)];

// Melewati reflektor

char reef = reflector[mod26(li(c))]; // Inverse rotor

int d = mod26(indexof(rotors[0], alpha[mod26(li(reef) + L)]) - L);

(8)

char f = alpha[mod26(indexof(rotors[2], alpha[mod26(e + R)]) - R)];

output += f;

}

return output; }

} }

Form Dekripsi Pesan :

using System;

using System.Drawing;

using System.Windows.Forms; using System.IO;

namespace program_skripsi_rabin {

public partial class Dekripsi : Form {

string kunciEnigma; UInt64 d,n;

string[] chipkuncis;

UInt64[] chipkuncid, kunciEnigmaa; char[] kunciEnigmab;

public Dekripsi() {

public UInt64 sma(UInt64 x, UInt64 H, UInt64 n) {

UInt64 r;

int[] bin = new int[32]; int i;

r = x; i = 0; /* ubah H ke Biner */

while( H > 0 ) {

if (H % 2 == 0) {

bin[i] = 0; }

else {

bin[i] = 1; }

H = H/2; i++; }

i--;

while(i>0) {

r = (r * r) % n; if( bin[--i] == 1 ) {

r = (r * x) % n; }

}

(9)

void Button1Click(object sender, EventArgs e) {

textBox3.Text = null; try

{

OpenFileDialog open = new OpenFileDialog(); open.Filter = "Rabin-William file( *.rw)|*.rw";

if (open.ShowDialog() == DialogResult.OK) {

string nama =

open.FileName.Substring(0, open.FileName.Length);

FileStream fstream = new FileStream(nama, FileMode.Open,FileAccess.ReadWrite);

StreamReader sreader = new StreamReader(fstream);

sreader.BaseStream.Seek(0, SeekOrigin.Begin);

string keterangan = sreader.ReadToEnd();

textBox3.Text = keterangan; sreader.Close();

} }

catch (Exception ex) {

MessageBox.Show(ex.ToString()); }

}

void Label7Click(object sender, EventArgs e) {

}

void Button2Click(object sender, EventArgs e) {

d = Convert.ToUInt64(textBox1.Text); n = Convert.ToUInt64(textBox2.Text); chipkuncis = textBox3.Text.Split(',');

chipkuncid = new UInt64[chipkuncis.Length-1]; kunciEnigmaa = new UInt64[chipkuncis.Length-1]; kunciEnigmab = new char[chipkuncis.Length-1]; for (int i = 0; i < chipkuncis.Length-1; i++) {

chipkuncid[i] =

Convert.ToUInt64(chipkuncis[i]);

kunciEnigmaa[i] = sma(chipkuncid[i],d,n)%256;

kunciEnigmab[i] =

Convert.ToChar(kunciEnigmaa[i]);

kunciEnigma += kunciEnigmab[i]; }

textBox4.Text = kunciEnigma; //3023,1663,364,2798,273, }

void MenuToolStripMenuItemClick(object sender, EventArgs e)

(10)

bangkit_kunci pindah = new bangkit_kunci(); pindah.Show();

this.Hide(); }

void EnkripsiToolStripMenuItemClick(object sender, EventArgs e)

{

enkripsi pindah = new enkripsi(); pindah.Show();

this.Hide(); }

void DekripsiToolStripMenuItemClick(object sender, EventArgs e)

{

Dekripsi pindah = new Dekripsi(); pindah.Show();

this.Hide(); }

void Button5Click(object sender, EventArgs e) {

textBox3.Text = null; try

{

OpenFileDialog open = new OpenFileDialog(); open.Filter = "private key( *.privkey)|*.privkey";

if (open.ShowDialog() == DialogResult.OK) {

string nama =

open.FileName.Substring(0, open.FileName.Length);

FileStream fstreamm = new FileStream(nama, FileMode.Open,FileAccess.ReadWrite);

StreamReader sreaderr = new StreamReader(fstreamm);

sreaderr.BaseStream.Seek(0, SeekOrigin.Begin);

string keterangan =

sreaderr.ReadToEnd();

string[] infochar = new string[1]; infochar = keterangan.Split('~'); textBox2.Text = infochar[0]; textBox1.Text = infochar[1]; sreaderr.Close();

} }

catch (Exception ex) {

MessageBox.Show(ex.ToString()); }

}

void Button4Click(object sender, EventArgs e) {

System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew();

(11)

MessageBox.Show("Waktu : " + sw.Elapsed.Milliseconds.ToString() + " ms");

}

void Button3Click(object sender, EventArgs e) {

richTextBox1.Text = null; try

{

OpenFileDialog open = new OpenFileDialog(); open.Filter = "Enigma ( *.Enigma)|*.Enigma"; if (open.ShowDialog() == DialogResult.OK) {

string nama =

open.FileName.Substring(0, open.FileName.Length);

FileStream fstream = new FileStream(nama, FileMode.Open,FileAccess.ReadWrite);

StreamReader sreader = new StreamReader(fstream);

sreader.BaseStream.Seek(0, SeekOrigin.Begin);

string keterangan = sreader.ReadToEnd();

richTextBox1.Text = keterangan; sreader.Close();

} }

catch (Exception ex) {

MessageBox.Show(ex.ToString()); }

} }

Referensi

Dokumen terkait

BPJT mempunyai wewenang melakukan sebagian pengaturan, pengusahaan, dan pengawasan Badan Usaha jalan tol untuk memberikan manfaat yang maksimal bagi negara dan

Kemudian pada penelitian ini end-user dapat mengetahui perbedaan teknologi masing- masing situs dari layanan musik streaming seperti proses mendataftarkan akun,

Hasil penelitian menunjukkan bahwa faktor yang memberikan kontribusi terbesar pada model TPACK yaitu aspek Pedagogical Knowledge dan Technological Pedagogical

Narasumber yang dipilih penulis adalah dua orang perawat yang telah bekerja lebih dari lima tahun di Panti Lansia Santa Anna dan dua orang lansia yang tinggal di Panti Lansia Santa

Dari hasil penelitian yang peneliti lakukan pada PI,. PIII, IV, peneliti menemukan bahwa

• Bila subclass yang diturunkan dari abstract y g class tidak mengimplementasikan isi semua method abstrak parent class, maka subclass tersebut harus tetap dideklarasikan abstract..

Dalam penelitian ini digunakan teknik triangulasi sumber untuk mendapatkan data dari sumber yang berbeda dengan teknik yang sama (Sugiyono, 2014). Peneliti juga

[r]