LISTING PROGRAM
Form Utama :
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespaceprogram_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;
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;
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);
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)
{
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");
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";
"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);
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; }
}
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)
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();
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()); }
} }