LAMPIRAN 1
LISTING PROGRAM
using System;
using System.Drawing;
using System.Windows.Forms; using System.Numerics; using System.IO;
using System.Diagnostics; using System.Text; using System.Linq;
using org.jivesoftware.util;
namespace Blowfish_multipowerRSA {
///<summary>
/// Description of Form_Utama. ///</summary>
publicpartialclassformutama : Form {
publicformutama() {
//
// The InitializeComponent() call is required for Windows Forms designer support. //
InitializeComponent();
//
// TODO: Add constructor code after the InitializeComponent() call. //
}
boolpangkat(int n){ if (n<=1)
returntrue;
for (int x=2; x<=Math.Sqrt(n); x++){ BigInteger p =x;
while (p<=n){ p*=x; if (p==n) returntrue; }
}
voidButton1Click(object sender, EventArgs e) {
BigInteger p,q,gcd; int z=0, nilaiP;
nilaiP = Convert.ToInt32(inputp.Text); if (nilaiP==2 || nilaiP==3)
status.Text = "Bilangan Prima"; elseif (pangkat(nilaiP))
status.Text = "Bilangan Komposit"; else {
for (int i = 2; i<=nilaiP; i++){
gcd = BigInteger.GreatestCommonDivisor(nilaiP,i); if (gcd==1){
z=i; break; }
}
p = BigInteger.ModPow((1+z),nilaiP,nilaiP); q = 1 + BigInteger.ModPow(z, nilaiP, nilaiP); if (p==q) {
status.Text = "Bilangan Prima"; }
else
status.Text = "Bilangan Komposit"; }
}
voidButton4Click(object sender, EventArgs e) {
inputp.Text = ""; status.Text = ""; }
voidCek2Click(object sender, EventArgs e) {
BigInteger v,w,gcd; int z=0, nilaiQ;
nilaiQ = Convert.ToInt32(inputq.Text); if (nilaiQ==2 || nilaiQ==3)
status1.Text = "Bilangan Prima"; elseif (pangkat(nilaiQ))
status1.Text = "Bilangan Komposit"; else {
for (int i = 2; i<=nilaiQ; i++){
z=i; break; }
}
v = BigInteger.ModPow((1+z),nilaiQ,nilaiQ); w = 1 + BigInteger.ModPow(z, nilaiQ, nilaiQ); if (v==w) {
status1.Text = "Bilangan Prima"; }
else
status1.Text = "Bilangan Komposit"; }
}
voidReset2Click(object sender, EventArgs e) {
inputq.Text = ""; status1.Text = ""; }
//menghitung nilai N
voidButton5Click(object sender, EventArgs e) {
int nilaip,nilaiq; BigInteger N;
nilaip = Convert.ToInt32(inputp.Text); nilaiq = Convert.ToInt32(inputq.Text); N = BigInteger.Pow(nilaip,2) * nilaiq; nilaiN.Text = Convert.ToString(N); }
//menghitung nilai d
voidHitungdClick(object sender, EventArgs e) {
BigInteger modulo, ambilnilaie, hasild, nilaip, nilaiq,nilaid=1; nilaip = Convert.ToInt32(inputp.Text);
nilaiq = Convert.ToInt32(inputq.Text); ambilnilaie = Convert.ToInt32(nilaie.Text); modulo = (nilaip-1)*(nilaiq-1);
for(int i=1; i<=modulo; i++){ hasild = (i*ambilnilaie)%modulo; if (hasild==1){
nilaid = i;
hasild1.Text = Convert.ToString(nilaid); break;
}
//menghitung nilai r1
voidButton7Click(object sender, EventArgs e) {
int hitungr1, nilaip, nilaid;
nilaip = Convert.ToInt32(inputp.Text); nilaid = Convert.ToInt32(hasild1.Text); hitungr1 = nilaid%(nilaip-1);
nilair1.Text = Convert.ToString(hitungr1);
}
//menghitung nilai r2
voidButton8Click(object sender, EventArgs e) {
int hitungr2, nilaiq, nilaid;
nilaiq = Convert.ToInt32(inputq.Text); nilaid = Convert.ToInt32(hasild1.Text); hitungr2 = nilaid%(nilaiq-1);
nilair2.Text = Convert.ToString(hitungr2); }
//proses pada pembangkit kunci
voidProsesClick(object sender, EventArgs e) {
BigInteger nilN, nile, nilp, nilq, nilr1, nilr2; nilN = Convert.ToUInt64(nilaiN.Text); nile = Convert.ToUInt64(nilaie.Text); nilp = Convert.ToUInt64(inputp.Text); nilq = Convert.ToUInt64(inputq.Text); nilr1 = Convert.ToUInt64(nilair1.Text); nilr2 = Convert.ToUInt64(nilair2.Text);
publickey.Text = Convert.ToString(nilN) + "-" + Convert.ToString(nile);
privatekey.Text = Convert.ToString(nilp) + "-" + Convert.ToString(nilq) + "-" + Convert.ToString(nilr1) + "-" + Convert.ToString(nilr2) + "-" +
Convert.ToString(nilN) + "-" + Convert.ToString(nile); }
//mengecek nilai e
voidButton6Click(object sender, EventArgs e) {
BigInteger nilaip, nilaiq; BigInteger gcd;
for (int i=3; i<=hitungnilaie; i++){
gcd = BigInteger.GreatestCommonDivisor(hitungnilaie,i); if (gcd==1){
nilaie.Text = Convert.ToString(i); break;
} } }
//simpan public key dan private key
voidSimpanClick(object sender, EventArgs e) {
SaveFileDialog simpan = newSaveFileDialog(); simpan.Filter = "Bangkit Kunci(*.kunci) |*.kunci"; simpan.FileName = ".kunci";
if (simpan.ShowDialog() == DialogResult.OK) {
FileStream fstreamm
= newFileStream(simpan.FileName,FileMode.OpenOrCreate); StreamWriter sww = newStreamWriter(fstreamm); SeekOrigin seekoriginn = newSeekOrigin();
sww.BaseStream.Seek(0, seekoriginn); sww.WriteLine(publickey.Text); sww.WriteLine(privatekey.Text); sww.Flush();
sww.Close(); }
}
//hapus pada pembangkit kunci
voidHapusClick(object sender, EventArgs e) {
inputp.Text =""; inputq.Text =""; status.Text =""; status1.Text =""; nilaiN.Text = ""; nilaie.Text = ""; nilair1.Text = ""; nilair2.Text = ""; hasild1.Text = ""; publickey.Text = ""; privatekey.Text = ""; }
stringkuncipublik, kunciprivate;
voidButton3Click(object sender, EventArgs e) {
OpenFileDialog buka = newOpenFileDialog(); buka.Filter = "Kunci(*.kunci)|*.kunci"; if (buka.ShowDialog() == DialogResult.OK) { tb_lokasi.Text = buka.FileName;
string nama = buka.FileName.Substring(0, buka.FileName.Length); FileStream fstreamm = newFileStream(nama, FileMode.Open, FileAccess.ReadWrite);
StreamReader sreader = newStreamReader(fstreamm); sreader.BaseStream.Seek(0, SeekOrigin.Begin);
kuncipublik = sreader.ReadLine(); kunciprivate = sreader.ReadLine(); sreader.Close();
tb_publickey.Text = kuncipublik; }
}
//---//
//---PROSES ENKRIPSI KUNCI SIMETRIS---// voidButton9Click(object sender, EventArgs e)
{
Stopwatch hitungwaktu = newStopwatch(); hitungwaktu.Start();
string ambilstring, ambilnilai;
ambilstring = Convert.ToString(tb_publickey.Text); ambilnilai = Convert.ToString(tb_kuncisimetris.Text); string [] parts = ambilstring.Split('-');
BigInteger [] numArray = newBigInteger[parts.Length]; BigInteger [] charvalue = newBigInteger[ambilnilai.Length]; BigInteger [] cipherkey = newBigInteger[ambilnilai.Length];
for (int i=0; i<=parts.Length-1; i++)
BigInteger.TryParse(parts[i], out numArray[i]);
for (int i=0; i<=ambilnilai.Length-1; i++){ charvalue[i] = Convert.ToInt32(ambilnilai[i]);
cipherkey[i] = BigInteger.ModPow(charvalue[i], numArray[1], numArray[0]); }
foreach (BigInteger myInt in cipherkey)
tb_cipherkey.Text = tb_cipherkey.Text+myInt.ToString()+"-";
hitungwaktu.Stop();
string timerenkripsikunci = (int.Parse(hitungwaktu.Elapsed.ToString("fffffff")) / 10000f).ToString();
}
voidButton2Click(object sender, EventArgs e) {
string kunci, simetris;
kunci = Convert.ToString(tb_kuncienkripsi.Text); simetris = kunci;
tb_kuncisimetris.Text = simetris; Stopwatch waktu = newStopwatch(); waktu.Start();
Blowfish enkripsi = newBlowfish(tb_kuncisimetris.Text); string enkripsiteks = enkripsi.encryptString(rtb_plaintext.Text); rtb_ciphertext.Text = Convert.ToString(enkripsiteks);
waktu.Stop();
string timerenkripsifile = (int.Parse(waktu.Elapsed.ToString("fffffff")) / 10000f).ToString();
tb_runningteks.Text = double.Parse(timerenkripsifile).ToString() + " ms"; }
//---Menyimpan Hasil Cipherkey---// voidButton11Click(object sender, EventArgs e)
{
SaveFileDialog simpan = newSaveFileDialog();
simpan.Filter = "Cipherkey(*.cipherkey) |*.cipherkey"; simpan.FileName = ".cipherkey";
if (simpan.ShowDialog() == DialogResult.OK) {
string namafile = simpan.FileName.Substring(0, simpan.FileName.Length - 10) + "a.dat";
FileStream fstreamm
= newFileStream(simpan.FileName,FileMode.OpenOrCreate); StreamWriter sww = newStreamWriter(fstreamm); SeekOrigin seekoriginn = newSeekOrigin();
sww.BaseStream.Seek(0, seekoriginn); sww.WriteLine(tb_cipherkey.Text); //sww.WriteLine(privatekey.Text); sww.Flush();
sww.Close(); }
}
//---//
//---Membuka Cipherkey---// stringcipherkeydek;
voidButton13Click(object sender, EventArgs e) {
OpenFileDialog buka = newOpenFileDialog(); buka.Filter = "Cipherkey(*.cipherkey)|*.cipherkey"; if (buka.ShowDialog() == DialogResult.OK) {
string nama = buka.FileName.Substring(0, buka.FileName.Length); FileStream fstreamm = newFileStream(nama, FileMode.Open, FileAccess.ReadWrite);
StreamReader sreader = newStreamReader(fstreamm); sreader.BaseStream.Seek(0, SeekOrigin.Begin);
cipherkeydek= sreader.ReadLine(); //kunciprivate = sreader.ReadLine(); sreader.Close();
tb_cipherkeydek.Text = cipherkeydek; }
}
//---//
//---Membuka Private Key---// voidCarikunciClick(object sender, EventArgs e)
{
OpenFileDialog buka = newOpenFileDialog(); buka.Filter = "Kunci(*.kunci)|*.kunci"; if (buka.ShowDialog() == DialogResult.OK) {
string nama = buka.FileName.Substring(0, buka.FileName.Length); FileStream fstreamm = newFileStream(nama, FileMode.Open, FileAccess.ReadWrite);
StreamReader sreader = newStreamReader(fstreamm); sreader.BaseStream.Seek(0, SeekOrigin.Begin);
kuncipublik = sreader.ReadLine(); kunciprivate = sreader.ReadLine(); sreader.Close();
tb_privatekey.Text = kunciprivate; }
}
//---//
voidButton14Click(object sender, EventArgs e) {
Stopwatch hitung = newStopwatch(); hitung.Start();
Blowfish dekripsi = newBlowfish(tb_kunci.Text);
hitung.Stop();
string timerdekripsifile = (int.Parse(hitung.Elapsed.ToString("fffffff")) / 10000f).ToString();
tb_rtteks.Text = double.Parse(timerdekripsifile).ToString() + " ms"; }
//---Proses Dekripsi Kunci---// voidButton12Click(object sender, EventArgs e)
{
Stopwatch hitungwaktu = newStopwatch(); hitungwaktu.Start();
BigInteger p, hasilinvers,einvers=1,hasilinversp2, p2invers=1; string ambilstring, ambilnilai;
ambilstring = Convert.ToString(tb_privatekey.Text); ambilnilai = Convert.ToString(tb_cipherkeydek.Text); string [] parts = ambilstring.Split('-');
BigInteger [] numArray = newBigInteger[parts.Length]; string [] charvalue = ambilnilai.Split('-');
BigInteger [] panjangArray = newBigInteger[charvalue.Length]; BigInteger [] Cp = newBigInteger[charvalue.Length];
BigInteger [] Cq = newBigInteger[charvalue.Length]; BigInteger [] Mp = newBigInteger[charvalue.Length]; BigInteger [] K0 = newBigInteger[charvalue.Length]; BigInteger [] A = newBigInteger[charvalue.Length]; BigInteger [] Mq = newBigInteger[charvalue.Length]; BigInteger [] V = newBigInteger[charvalue.Length]; int [] konversi = newint[charvalue.Length];
BigInteger [] kuncisimetris = newBigInteger[charvalue.Length]; char [] karakter = newchar[charvalue.Length];
for (int k=0; k<=parts.Length-1; k++)
BigInteger.TryParse(parts[k], out numArray[k]);
for (int mulai=0; mulai<=charvalue.Length-1; mulai++)
BigInteger.TryParse(charvalue[mulai], out panjangArray[mulai]);
p = numArray[0]*numArray[0]; for (int l=1; l<=numArray[0]; l++){
hasilinvers = l*numArray[5]%numArray[0]; if (hasilinvers==1){
einvers = l; break; }
}
for (int j=1; j<=p; j++){
p2invers = j; break; }
}
for (int i=0; i<=charvalue.Length-1; i++){ Cp[i] = panjangArray[i]%p;
Cq[i] = panjangArray[i]%numArray[1]; BigInteger nilai=1;
for (int b=1; b<=numArray[2]-1; b++){ nilai = nilai*Cp[i];
}
Mp[i] = nilai%numArray[0]; K0[i] = Mp[i]*Cp[i]%numArray[0]; BigInteger nilai1=1;
for (int c=1; c<=numArray[5]; c++) nilai1 = nilai1*K0[i];
A[i] = -1 * nilai1 % p;
A[i] = A[i] + panjangArray[i]%p; Mp[i] = Mp[i]*A[i]%p;
Mp[i] = Mp[i]*einvers%p; Mp[i] = Mp[i] + K0[i]%p; BigInteger nilai2=1;
for (int d=1; d<=numArray[3]; d++) nilai2 = nilai2*Cq[i];
Mq[i] = nilai2%numArray[1]; V[i] = Mq[i] - Mp[i] % numArray[1];
V[i] = V[i] *p2invers%numArray[1]; kuncisimetris[i] = V[i]*p%numArray[4];
kuncisimetris[i] = kuncisimetris[i] + Mp[i] %numArray[4]; konversi[i] = (int) kuncisimetris[i];
karakter[i] = Convert.ToChar(konversi[i]); }
string karakterlengkap = newstring(karakter);
tb_kuncisimetrisdek.Text = Convert.ToString(karakterlengkap); hitungwaktu.Stop();
string timerdekripsikunci = (int.Parse(hitungwaktu.Elapsed.ToString("fffffff")) / 10000f).ToString();
tb_runningtimedek.Text = double.Parse(timerdekripsikunci).ToString() + " ms"; tb_kunci.Text = Convert.ToString(karakterlengkap);
//tb_kunci.Text = Convert.ToString(konversi[0]); }
//cari file yg mau dienkripsi stringtipe, format;
OpenFileDialog dialog = newOpenFileDialog();
dialog.Filter = "Word File|*.doc;*.docx| TextFile |*.txt"; dialog.Title = "Open File : ";
dialog.RestoreDirectory = true;
if (dialog.ShowDialog() == DialogResult.OK) {
tipe = dialog.FileName.Substring(dialog.FileName.Length - 3, 3); format = dialog.FileName.Substring(dialog.FileName.Length - 4, 4);
if (tipe == "doc") {
tb_lokasi.Text = dialog.FileName;
}
elseif (tipe == "txt") {
tb_lokasi.Text = dialog.FileName;
}
elseif (format == "docx") {
tb_lokasi.Text = dialog.FileName; }
}
if (tipe == "doc") {
Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
object filenameO = tb_lokasi.Text.ToString(); object objFalse = false;
object objTrue = true;
object missing = System.Reflection.Missing.Value; object emptyData = string.Empty;
Microsoft.Office.Interop.Word.Document aDoc = wordApp.Documents.Open(ref filenameO, ref objFalse, ref objTrue, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref objTrue, ref missing, ref missing, ref missing, ref missing);
aDoc.ActiveWindow.Selection.WholeStory(); aDoc.ActiveWindow.Selection.Copy();
IDataObject data = Clipboard.GetDataObject();
String fileText = data.GetData(DataFormats.Text).ToString(); Clipboard.SetDataObject(string.Empty);
rtb_plaintext.Text = fileText;
int baca = rtb_plaintext.Text.Length; string pjg = baca.ToString();
}
elseif (format == "docx") {
Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
object filenameO = tb_lokasi.Text.ToString(); object objFalse = false;
object objTrue = true;
object missing = System.Reflection.Missing.Value; object emptyData = string.Empty;
Microsoft.Office.Interop.Word.Document aDoc = wordApp.Documents.Open(ref filenameO, ref objFalse, ref objTrue, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref objTrue, ref missing, ref missing, ref missing, ref missing);
aDoc.ActiveWindow.Selection.WholeStory(); aDoc.ActiveWindow.Selection.Copy();
IDataObject data = Clipboard.GetDataObject();
String fileText = data.GetData(DataFormats.Text).ToString(); Clipboard.SetDataObject(string.Empty);
rtb_plaintext.Text = fileText;
int baca = rtb_plaintext.Text.Length; string pjg = baca.ToString();
tb_panjangkarakter.Text = pjg; }
elseif (tipe == "txt") {
string fileText = File.ReadAllText(dialog.FileName); rtb_plaintext.Text = fileText;
int baca = rtb_plaintext.Text.Length; string pjg = baca.ToString();
tb_panjangkarakter.Text = pjg; }
}
//menyimpan ciphertext
voidSimpancipherClick(object sender, EventArgs e) {
SaveFileDialog simpanciphertext = newSaveFileDialog(); simpanciphertext.Filter = "Ciphertext(*.mahadi) |*.mahadi"; simpanciphertext.FileName = ".mahadi";
if (simpanciphertext.ShowDialog() == DialogResult.OK) {
string namafile = simpanciphertext.FileName.Substring(0, simpanciphertext.FileName.Length - 7) + "a.dat";
FileStream fstreamm
StreamWriter sww = newStreamWriter(fstreamm); SeekOrigin seekoriginn = newSeekOrigin();
sww.BaseStream.Seek(0, seekoriginn); sww.WriteLine(rtb_ciphertext.Text); sww.Flush();
sww.Close(); }
}
//reset pada enkripsi
voidButton10Click(object sender, EventArgs e) {
rtb_plaintext.Text = ""; tb_kuncisimetris.Text = ""; rtb_ciphertext.Text = ""; tb_kuncienkripsi.Text = ""; tb_cipherkey.Text = ""; tb_publickey.Text = ""; tb_lokasi.Text = "";
tb_panjangkarakter.Text = ""; tb_runningteks.Text = ""; tb_runningtimekunci.Text = ""; }
stringtext;
voidButton15Click(object sender, EventArgs e) {
OpenFileDialog bukaciphertext = newOpenFileDialog(); bukaciphertext.Filter = "Ciphertext(*.mahadi)|*.mahadi"; if (bukaciphertext.ShowDialog() == DialogResult.OK) { string nama = bukaciphertext.FileName.Substring(0, bukaciphertext.FileName.Length);
FileStream fstreamm = newFileStream(nama, FileMode.Open, FileAccess.ReadWrite);
StreamReader sreader = newStreamReader(fstreamm); sreader.BaseStream.Seek(0, SeekOrigin.Begin);
text = sreader.ReadToEnd(); sreader.Close();
rtb_cipher.Text = text;
int baca = rtb_cipher.Text.Length; string jumlah = baca.ToString(); tb_panjang.Text = jumlah;
tb_tempat.Text = bukaciphertext.FileName; }
}
tb_cipherkeydek.Text =""; tb_privatekey.Text =""; tb_kuncisimetrisdek.Text =""; tb_tempat.Text = "";
tb_panjang.Text = ""; tb_rtteks.Text = "";
tb_runningtimedek.Text = ""; rtb_cipher.Text = "";
tb_kunci.Text = ""; rtb_plain.Text = ""; }
voidButton17Click(object sender, EventArgs e) {
SaveFileDialog simpanpesan = newSaveFileDialog(); simpanpesan.Filter = "FileAsli(*.doc) |*.doc"; simpanpesan.FileName = ".doc";
if (simpanpesan.ShowDialog() == DialogResult.OK) {
string namafile = simpanpesan.FileName.Substring(0, simpanpesan.FileName.Length - 4) + "a.dat";
FileStream fstreamm
= newFileStream(simpanpesan.FileName,FileMode.OpenOrCreate); StreamWriter sww = newStreamWriter(fstreamm);
SeekOrigin seekoriginn = newSeekOrigin(); sww.BaseStream.Seek(0, seekoriginn); sww.WriteLine(rtb_plain.Text); sww.Flush();
sww.Close(); }
}
voidLanjutClick(object sender, EventArgs e) {
}
voidTb_lokasiTextChanged(object sender, EventArgs e) {
}
voidTb_runningteksTextChanged(object sender, EventArgs e) {
}
//---// }
LAMPIRAN 2
CURRICULUM VITAE
DATA DIRI
Nama Lengkap
: Mahadi Putra
Nama Panggilan
: Mahadi
Tempat/Tanggal Lahir
: Binjai/29 Juni 1995
Jenis Kelamin
: Laki-laki
Agama
: Islam
Kebangsaan
: Indonesia
Alamat
: Jl. Perintis Kemerdekaan XVI No. 2A,
Binjai, Sumatera Utara
Nomor HP
: +6281214672554
: [email protected]
RIWAYAT PENDIDIKAN
S1 Ilmu Komputer
Universitas Sumatera Utara, Medan
131401057
Sekolah Menengah Atas
MAN BINJAI
2010-2013
Sekolah Menengah Pertama
MTsN BINJAI
2007-2010
Sekolah Dasar
No.
Nama Seminar/Kursus/Workshop
Tahun
1
Workshop IT : GIT Repository
2017
2
Global Inspiring Seminar of Indonesia Next Program 2016
2016
3
Seminar Nasional Literasi Indormasi (SENARAI)
2014
4
Seminar What Will You Be
2013
5
Pelatihan Dasar Organisasi IMILKOM
2015
6
Kursus Bahasa Inggris Oxford
2003
7
Bimbingan Belajar Ganesha Operation
2010
Bahasa Pemrograman
: C++, C#, HTML
DMBS
: MySQL
Software
:Office Application, Photoshop
PENGALAMAN ORGANISASI
No Organisasi Posisi Tahun
1 IMILKOM USU Ketua Umum 2016-sekarang
2 IMILKOM USU Anggota Dana dan Usaha 2015-2016
3 Porseni IMILKOM 2015 Koordinator Humas 2015
4 Ilmu Komputer Goes To School
2014 Ketua 2014
5 Paskibra Anggota 2010-2012
6 Pramuka Anggota 2011-2013
7 CISC Binjai Bendahara 2016-sekarang