• Tidak ada hasil yang ditemukan

LISTING PROGRAM. 1. Form Menu Utama. Universitas Sumatera Utara

N/A
N/A
Protected

Academic year: 2021

Membagikan "LISTING PROGRAM. 1. Form Menu Utama. Universitas Sumatera Utara"

Copied!
31
0
0

Teks penuh

(1)

LISTING PROGRAM

1. Form Menu Utama

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using hybrid.Controller; namespace KriptografiHybrid.Controller {

public partial class mainForm : Form {

#region VAR ############

private Boolean bIsExit = false;

#endregion #region KONSTRUKTOR ################### public mainForm() { InitializeComponent(); } #endregion #region PROPERTIES public Boolean isExit {

get { return bIsExit; } }

#endregion

private void enkripsiToolStripMenuItem_Click(object sender, EventArgs e)

{

encryptForm oForm2 = new encryptForm(); oForm2.ShowDialog(); if (oForm2.IsAccessible) { this.Close(); } }

private void dekripsiToolStripMenuItem_Click(object sender, EventArgs e)

{

decryptForm oForm3 = new decryptForm(); oForm3.ShowDialog(); if (oForm3.IsAccessible) { this.Close(); } }

(2)

private void exitToolStripMenuItem_Click(object sender, EventArgs e) { bIsExit = true; this.Close(); }

private void bantuanToolStripMenuItem_Click(object sender, EventArgs e)

{ }

private void tentangProgrammerToolStripMenuItem_Click(object

sender, EventArgs e) {

programmerForm oForm4 = new programmerForm(); oForm4.ShowDialog();

}

private void menggunakanAplikasiToolStripMenuItem_Click(object

sender, EventArgs e) {

HelpForm oForm5 = new HelpForm(); oForm5.ShowDialog(); } } }

2. Form Enkripsi

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using hybrid.Lib; using System.Diagnostics; namespace KriptografiHybrid.Controller {

public partial class encryptForm : Form {

long jum; int nckey; int n = 0;

long[] nil_w = new long[1000]; int[,] tempval = new int[4, 4]; int a;

int[,] kunci = new int[4, 4]; private String fileExt; DoubleMatrix k = null;

(3)

#region VAR ############

// private Boolean bIsExit = false;

// private Boolean pembangkitKunciValid = false;

#endregion #region KONSTRUKTOR ################### public encryptForm() { InitializeComponent(); } #endregion

#region SUDAH DIRAPIKAN /// <summary>

/// Set default /// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void encryptForm_Load(object sender, EventArgs e) {

cbMatrixKunci.SelectedIndex = 0; }

/// <summary>

/// Cari file yang akan di enkripsi /// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void btnPilihSumberFile_Click(object sender, EventArgs e) {

OpenFileDialog FileDialog = new OpenFileDialog(); if (FileDialog.ShowDialog() == DialogResult.OK) { txtSumberFile.Text = FileDialog.FileName.ToString(); fileExt = Path.GetExtension(FileDialog.FileName).Substring(1); txtExtensiSumberFile.Text = fileExt; } } /// <summary>

/// Generate matrix kunci /// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void btnGenerateKunci_Click(object sender, EventArgs e) {

cbJumlahW.Items.Clear();

if (cbMatrixKunci.Text == "2x2") {

a = 2;

for (int i = 2; i < ((32 / 2) + 1); i++) { if (32 % i == 0) { cbJumlahW.Items.Add(i.ToString()); } } } else if (cbMatrixKunci.Text == "3x3")

(4)

{

a = 3;

for (int i = 2; i < ((72 / 2) + 1); i++) { if (72 % i == 0) { cbJumlahW.Items.Add(i.ToString()); } } } else if (cbMatrixKunci.Text == "4x4") { a = 4;

for (int i = 2; i < ((128 / 2) + 1); i++) { if (128 % i == 0) { cbJumlahW.Items.Add(i.ToString()); } } } else {

MessageBox.Show("Secara Otomatis 2x2"); a = 2;

for (int i = 2; i < 17; i++) {

if (32 % i == 0)

cbJumlahW.Items.Add(i.ToString()); }

}

Random rand = new Random(); int b = rand.Next(1, 256); richTextBox1.Text = ""; bool kondisi = false; while (!kondisi) {

for (int i = 0; i < a; i++) { for (int j = 0; j < a; j++) { kunci[i, j] = rand.Next(0, 255); //richTextBox1.Text += kunci[i,j].ToString() + " "; } richTextBox1.Text += "\n"; } int det = 0; if (a == 2) {

det = (kunci[0, 0] * kunci[1, 1]) - (kunci[1, 0] * kunci[0, 1]);

// MessageBox.Show("hasi determinanan" + det); }

else if (a == 3) {

(5)

det = ((kunci[0, 0] * kunci[1, 1] * kunci[2, 2]) + (kunci[0, 1] * kunci[1, 2] * kunci[2, 0]) + (kunci[0, 2] * kunci[1, 0] * kunci[2, 1])) - ((kunci[2, 0] * kunci[1, 1] * kunci[0, 2]) + (kunci[2, 1] * kunci[1, 2] * kunci[0, 0]) + (kunci[2, 2] * kunci[1, 0] * kunci[0, 1])); }

else if (a == 4) {

det = (

((kunci[0, 0] * kunci[1, 1]) - (kunci[0, 1] * kunci[1, 0])) *

((kunci[2, 2] * kunci[3, 3]) - (kunci[3, 2] * kunci[2, 3])) -

((kunci[2, 0] * kunci[3, 1]) - (kunci[3, 0] * kunci[2, 1])) *

((kunci[0, 2] * kunci[1, 3]) - (kunci[1, 2] * kunci[0, 3])) ); } while (det < 0) { det += 256; } if (det % 2 != 0) { while (((256 * b) + 1) % det == 0) { b = rand.Next(1, 256); } richTextBox1.Text = ""; for (int i = 0; i < a; i++) {

for (int j = 0; j < a; j++) {

richTextBox1.Text += kunci[i, j].ToString() + " "; } richTextBox1.Text += "\n"; } detInv.Text = b.ToString(); kondisi = true; } }

// Knoversi dari array kunci ke class DoubleMatrix // (nilai byte = 1 {2x2},2{3x3},3{4x4})

int selectedIndexKeyMatrix = cbMatrixKunci.SelectedIndex + 1; if (selectedIndexKeyMatrix == 1) // 2x2

{

k = new DoubleMatrix(2, 2);

// baris dan kolom pada DoubleMatrix terbalik // baris 0 k[0, 0] = kunci[0, 0]; k[1, 0] = kunci[0, 1]; // baris 1 k[0, 1] = kunci[1, 0]; k[1, 1] = kunci[1, 1];

(6)

} else if (selectedIndexKeyMatrix == 2) // 3x3 { k = new DoubleMatrix(3, 3); // baris 0 k[0, 0] = kunci[0, 0]; k[1, 0] = kunci[0, 1]; k[2, 0] = kunci[0, 2]; // baris 1 k[0, 1] = kunci[1, 0]; k[1, 1] = kunci[1, 1]; k[2, 1] = kunci[1, 2]; // baris 2 k[0, 2] = kunci[2, 0]; k[1, 2] = kunci[2, 1]; k[2, 2] = kunci[2, 2]; } else if (selectedIndexKeyMatrix == 3) // 4x4 { k = new DoubleMatrix(4, 4); // baris 0 k[0, 0] = kunci[0, 0]; k[1, 0] = kunci[0, 1]; k[2, 0] = kunci[0, 2]; k[3, 0] = kunci[0, 3]; // baris 1 k[0, 1] = kunci[1, 0]; k[1, 1] = kunci[1, 1]; k[2, 1] = kunci[1, 2]; k[3, 1] = kunci[1, 3]; // baris 2 k[0, 2] = kunci[2, 0]; k[1, 2] = kunci[2, 1]; k[2, 2] = kunci[2, 2]; k[3, 2] = kunci[2, 3]; // baris 3 k[0, 3] = kunci[3, 0]; k[1, 3] = kunci[3, 1]; k[2, 3] = kunci[3, 2]; k[3, 3] = kunci[3, 3]; } Console.WriteLine(k); } /// <summary>

/// Ambil tujuan file enkripsi /// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void btnPilihTujuanFile_Click(object sender, EventArgs e) {

SaveFileDialog saveDialog = new SaveFileDialog(); saveDialog.DefaultExt = fileExt;

saveDialog.AddExtension = true;

saveDialog.Filter = fileExt + " (*." + fileExt + ")|" + fileExt;

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

(7)

txtTujuanFile.Text = saveDialog.FileName.ToString(); }

}

/// <summary>

/// Lakukan enkripsi cipher hill /// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void btnEnkripsi_Click(object sender, EventArgs e) {

Stopwatch stopwatch = new Stopwatch(); stopwatch.Start();

//DateTime awal, akhir; //awal = DateTime.Now;

FileBitReader reader = new FileBitReader(txtSumberFile.Text); FileBitWriter writer = new FileBitWriter(txtTujuanFile.Text); // 1. Simpan pengenal personal

writer.writeByte("HANNA"); // 2. Simpan ukuran file

int fileSize = (int)reader.getFileSize(); int byteFileSize1 = fileSize >> 24;

int byteFileSize2 = (fileSize >> 16) % 256; int byteFileSize3 = (fileSize >> 8) % 256; int byteFileSize4 = fileSize % 256;

writer.writeByte(byteFileSize1); writer.writeByte(byteFileSize2); writer.writeByte(byteFileSize3); writer.writeByte(byteFileSize4);

// 3. Simpan ukuran key matrix cipher hill (nilai byte = 1 {2x2},2{3x3},3{4x4})

int selectedIndexKey = cbMatrixKunci.SelectedIndex + 1; writer.writeByte(selectedIndexKey); HillCipher.encrypt(reader, writer, k); this.timer1.Start(); reader.close(); writer.close(); stopwatch.Stop();

MessageBox.Show("Enkripsi File Berhasil! (" + txtTujuanFile.Text + ")"); //lama enkripsi textBox4.Text = stopwatch.ElapsedMilliseconds + " ms ".ToString(); //ukuran file

FileBitReader fileAsli = new FileBitReader(txtSumberFile.Text); textBox6.Text = fileAsli.getFileSize() + " byte ".ToString(); fileAsli.close();

//ukuran cipherfile

FileBitReader fileTerenkrip = new

FileBitReader(txtTujuanFile.Text);

textBox3.Text = fileTerenkrip.getFileSize() +" byte ".ToString();

(8)

fileTerenkrip.close(); //} } /// <summary> /// Pilih jumlah w /// </summary> /// <param name="sender"></param> /// <param name="e"></param>

private void cbJumlahW_SelectedIndexChanged(object sender, EventArgs e) { //int bitnil = 0; if (cbMatrixKunci.Text == "2x2") { // bitnil = 32; } else if (cbMatrixKunci.Text == "3x3") { // bitnil = 72; } else if (cbMatrixKunci.Text == "4x4") { // bitnil = 128; } //else } // bitnil = 32; // } /// <summary> /// Bangkitkan w,q,r /// </summary> /// <param name="sender"></param> /// <param name="e"></param>

private void btnGenerate_Click(object sender, EventArgs e) {

if (cbJumlahW.Text == "") {

MessageBox.Show("piih terlebih dahulu banyak item w"); }

else

{

Random rand = new Random(); long temp = 0;

n = Convert.ToInt32(cbJumlahW.Text); nil_w[0] = 1;

jum = nil_w[0];

txtW.Text = nil_w[0].ToString(); for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { temp += nil_w[j]; } nil_w[i] = temp + 1; jum += nil_w[i]; txtW.Text += " " + nil_w[i].ToString(); temp = 0;

(9)

} {

Random bil = new Random(); int acak = bil.Next(1, 256);

txtQ.Text = (acak + jum).ToString(); }

{

Random bil = new Random(); int acak = bil.Next(1, 255);

long Q = Convert.ToInt64(txtQ.Text); while (GCD.GCD1(acak, Q) != 1) { acak = bil.Next(1, 255); } txtR.Text = acak.ToString(); } { long r = Convert.ToInt32(txtR.Text), q = Convert.ToInt64(txtQ.Text); n = Convert.ToInt32(cbJumlahW.Text); long[] nilpublic = new long[n]; txtKunciPublik.Text = ""; for (int i = 0; i < n; i++) { nilpublic[i] = ((nil_w[i] * r) % q); txtKunciPublik.Text += nilpublic[i].ToString() + " "; } } { txtKunciPrivate.Text = txtW.Text; } } // dr sini } /// <summary>

/// Pilih tujuan key disimpan /// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void btnPilihTujuanKey_Click(object sender, EventArgs e) {

SaveFileDialog saveDialog = new SaveFileDialog(); saveDialog.DefaultExt = "cipherkey";

saveDialog.AddExtension = true;

saveDialog.Filter = "cipherkey (*.cipherkey)|cipherkey"; if (saveDialog.ShowDialog() == DialogResult.OK) { txtTujuanKey.Text = saveDialog.FileName.ToString(); } } /// <summary>

/// Lakukan enkripsi pada key (Knapsack) /// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

(10)

{

Stopwatch stopwatch = new Stopwatch(); stopwatch.Start();

String cipher = Knapsack.encrypt(n, txtKunciPublik.Text, a, kunci, nckey, txtTujuanKey.Text, txtQ.Text, txtR.Text, cbJumlahW.Text, txtKunciPrivate.Text);

textBox1.Text = cipher; stopwatch.Stop();

MessageBox.Show("Enkripsi Key Berhasil! (" + txtTujuanKey + ") - ");

textBox5.Text = stopwatch.ElapsedMilliseconds + " ms ".ToString();

} /// <summary>

/// Keluar dari form enkripsi /// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void btnBatal_Click(object sender, EventArgs e) {

Close(); }

#region fungsi pembantu

public int bin2int(string bin) {

int num = 0, count = 0;

for (int i = (bin.Length - 1); i >= 0; i--) {

if (bin[i] == '1')

num += pangkat(2, count); count++;

}

return num; }

public int pangkat(int a, int b) {

int hasil = 1;

for (int i = 1; i <= b; i++) {

hasil *= a; }

return hasil; }

public Int64 bruteModulo(Int64 a, Int64 b, Int64 c) {

return (((a % c) * (b % c)) % c); }

#endregion

private void timer1_Tick(object sender, EventArgs e) {

this.progressBar1.Increment(1); }

(11)

#endregion } }

3. Form Dekripsi

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using hybrid.Lib; using System.Diagnostics; namespace KriptografiHybrid.Controller {

public partial class decryptForm : Form {

// long jum; //int n = 0;

long[] nil_w = new long[1000]; int[,] tempval = new int[4, 4]; //int a;

int[,] kunci = new int[4, 4]; private String fileExt;

// DoubleMatrix k = null;

#region VAR ############

// private Boolean bIsExit = false;

#endregion #region KONSTRUKTOR ################### public decryptForm() { InitializeComponent(); } #endregion

#region Sudah Dirapikan /// <summary>

/// Pilih file cipher key dan baca w,q,r,cipherkey ke textbox /// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void btnPilihFileCipherKey_Click(object sender, EventArgs e)

{

OpenFileDialog openKey = new OpenFileDialog();

openKey.Filter = "cipherkey(*.cipherkey)|*.cipherkey"; if (openKey.ShowDialog() == DialogResult.OK)

{

string read = "";

StreamReader objReader = new

StreamReader(openKey.FileName);

(12)

read = objReader.ReadLine(); int count = 0;

while (read != null) { if (count == 0) { txt_Q.Text = read; } else if (count == 1) { txt_R.Text = read; } else if (count == 3) { txt_KunciPrivat.Text = read; } else if (count == 4) { txtCipherKey.Text = read; } count++; read = objReader.ReadLine(); } objReader.Close(); } } /// <summary>

/// Lakukan dekripsi knapsack terhadap cipherkey, q, w, r /// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void btn_DekripsiCipherkey_Click(object sender, EventArgs e)

{ try

{

Stopwatch stopwatch = new Stopwatch(); stopwatch.Start();

String result = Knapsack.decrypt(txt_KunciPrivat.Text, txtCipherKey.Text, txt_Q.Text, txt_R.Text);

txt_CipherMatrix.Text = result; stopwatch.Stop();

MessageBox.Show("Dekripsi Key Berhasil! ");

textBox2.Text = stopwatch.ElapsedMilliseconds + " ms ".ToString();

}

catch (Exception TerjadiKesalahan) {

MessageBox.Show("Error\n" + TerjadiKesalahan.ToString()); }

}

/// <summary>

/// Pilih sumber file yang sudah terenkripsi /// </summary>

/// <param name="sender"></param>

(13)

private void btnPilihSumberFile_Click(object sender, EventArgs e) {

OpenFileDialog FileDialog = new OpenFileDialog(); if (FileDialog.ShowDialog() == DialogResult.OK) { txtSumberFileDekripsi.Text = FileDialog.FileName.ToString(); fileExt = Path.GetExtension(FileDialog.FileName).Substring(1); } } /// <summary>

/// Pilih dimana file hasil dekripsi disimpan (Cipherhill) /// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void btnPilihTujuanFile_Click(object sender, EventArgs e) {

SaveFileDialog saveDialog = new SaveFileDialog(); saveDialog.DefaultExt = fileExt;

saveDialog.AddExtension = true;

saveDialog.Filter = fileExt + " (*." + fileExt + ")|"+fileExt; if (saveDialog.ShowDialog() == DialogResult.OK) { txtTujuanFileDekripsi.Text = saveDialog.FileName.ToString(); } } /// <summary>

/// Lakukan proses dekripsi dan simpan file hasil dekripsi /// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void btn_Dekripsi_Click(object sender, EventArgs e) {

Stopwatch stopwatch = new Stopwatch(); stopwatch.Start();

String key = txt_CipherMatrix.Text; // 45 34 54 23 45 23 45 23 //buang spasi terakhir

key = key.Substring(0, key.Length - 1); // posisi terakhir adalah spasi

String[] keyArr = key.Split(' ');

if (keyArr.Length == 4 || keyArr.Length == 9 || keyArr.Length == 16)

{

int jenisMatrix = (int)Math.Sqrt(keyArr.Length); DoubleMatrix k = new DoubleMatrix(jenisMatrix, jenisMatrix);

int keyArrReaded = 0;

for (int baris = 0; baris < jenisMatrix; baris++) {

for (int kolom = 0; kolom < jenisMatrix; kolom++) {

k[kolom, baris] = Convert.ToDouble(keyArr[keyArrReaded]); keyArrReaded++; }

(14)

}

Console.WriteLine("k = " + k); FileBitReader reader = new

FileBitReader(txtSumberFileDekripsi.Text); FileBitWriter writer = new

FileBitWriter(txtTujuanFileDekripsi.Text);

String identifier = String.Empty; for (int i = 0; i < 5; i++) {

identifier += (char)reader.readByte(); }

if (identifier != "HANNA") {

MessageBox.Show("File yang anda pilih, tidak bisa di dekripsi!");

} else

{

//(nilai byte = 1 {2x2},2{3x3},3{4x4}) int byteFileSize1 = reader.readByte(); int byteFileSize2 = reader.readByte(); int byteFileSize3 = reader.readByte(); int byteFileSize4 = reader.readByte(); byteFileSize1 = byteFileSize1 << 24; byteFileSize2 = byteFileSize2 << 16; byteFileSize3 = byteFileSize3 << 8;

long ukuranFile = byteFileSize1 + byteFileSize2 + byteFileSize3 + byteFileSize4;

jenisMatrix = reader.readByte(); if (jenisMatrix + 1 != k.RowCount) {

throw new Exception("Jenis matrix tidak cocok!"); }

HillCipher.decrypt(reader, writer, k, ukuranFile); stopwatch.Stop();

MessageBox.Show("Dekripsi File Berhasil! " + txtTujuanFileDekripsi.Text + ")"); //lama dekripsi textBox1.Text = stopwatch.ElapsedMilliseconds + " ms ".ToString(); } //MessageBox.Show(identifier); writer.close(); reader.close(); } else {

MessageBox.Show("Key yang anda masukkan salah! Key harus berupa 2x2; 3x3; 4x4");

} }

#region Fungsi pembantu

public string int2bin(int num, int jum) {

string bin = "";

for (int i = 0; i < jum; i++) {

(15)

if (num % 2 == 1) { bin = "1" + bin; } else { bin = "0" + bin; } num = num / 2; } return bin; } #endregion

private void btnBatal_Click(object sender, EventArgs e) {

Close(); }

#endregion

private void groupBox1_Enter(object sender, EventArgs e) {

} } }

4. Form Menggunakan Aplikasi

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace hybrid.Controller {

public partial class HelpForm : Form { public HelpForm() { InitializeComponent(); } } }

5. Form Tentang

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing;

(16)

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace hybrid.Controller {

public partial class programmerForm : Form {

public programmerForm() {

InitializeComponent(); }

private void programmerForm_Load(object sender, EventArgs e) {

} } }

6. Class Hill Cipher

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; namespace hybrid.Lib { class HillCipher {

public static void encrypt(FileBitReader reader, FileBitWriter writer, DoubleMatrix k)

{

// ambil jenis matrix

int jenisMatrix; // total baris = total kolom jenisMatrix = k.RowCount;

// ambil ukuran file

long fileSize = reader.getFileSize();

// variabel count jumlah byte yang sudah dibaca long readedByte = 0;

// lakukan pembacaan sampai seluruh file terbaca while (readedByte < fileSize) {

// ambil sebanyak jumlah matrix dan ciptakan matrix DoubleMatrix matrixP = new DoubleMatrix(1, jenisMatrix); int readedP = 0;

while (readedP < jenisMatrix) {

if (readedByte < fileSize) {

matrixP[0, readedP] = reader.readByte(); readedByte++; } else { matrixP[0, readedP] = 0; } readedP++;

(17)

}

DoubleMatrix matrixC = new DoubleMatrix(1, jenisMatrix); matrixC = k * matrixP;

matrixC.mod(256);

//Console.WriteLine("matrixC setelah mod = " + matrixC); for (int baris = 0; baris < matrixC.RowCount; baris++ ) {

writer.writeByte((int) matrixC[0, baris]); }

} }

public static void decrypt(FileBitReader reader, FileBitWriter writer, DoubleMatrix k, long oriFileSize)

{

DoubleMatrix adjK = k.adjoint(); double detK = k.determinant(); double x = 0;

for (int i = 1; i < 10000; i++) {

double hasilModulo = (detK * i) % 256;

if (hasilModulo == 1 || (hasilModulo + 256) == 1) { x = i; break; } //if (((256 * i) + 1) % detK == 0 ) { // x = ((256 * i) + 1) / detK; //} } if (x == 0) {

throw new Exception("Tidak bisa menemukan nilai invers Det K");

}

DoubleMatrix invK = (x * adjK); invK.mod(256);

for (int baris = 0; baris < invK.RowCount; baris++ ) {

for (int kol = 0; kol < invK.ColumnCount; kol++) { if (invK[kol, baris] < 0) { invK[kol, baris] += 256; } } } // pembuktian

DoubleMatrix bukti = k * invK; bukti.mod(256);

for (int baris = 0; baris < invK.RowCount; baris++) {

for (int kol = 0; kol < invK.ColumnCount; kol++) {

if (baris == kol) {

(18)

throw new Exception("Inverse matrix benar!"); } } else { if (bukti[kol, baris] != 0) {

throw new Exception("Inverse matrix salah!"); } } } } long readedByte = 0; long writtenByte = 0;

int jenisMatrix = k.RowCount;

//Console.WriteLine("jenisMatrix = " + jenisMatrix); //Console.WriteLine("fileSize = " + fileSize); // lakukan pembacaan sampai seluruh file terbaca while (readedByte < oriFileSize)

{

// ambil sebanyak jumlah matrix dan ciptakan matrix DoubleMatrix matrixC = new DoubleMatrix(1, jenisMatrix); int readedP = 0;

while (readedP < jenisMatrix) {

matrixC[0, readedP] = reader.readByte(); readedByte++;

readedP++; }

//Debug.WriteLine("matrixC = " + matrixC); //Console.WriteLine("matrixP = " + matrixP);

DoubleMatrix matrixP = new DoubleMatrix(1, jenisMatrix); matrixP = invK * matrixC;

//Console.WriteLine("matrixC sebelum mod = " + matrixC); matrixP.mod(256);

//Debug.WriteLine("matrixP = " + matrixP);

//Console.WriteLine("matrixC setelah mod = " + matrixC); for (int baris = 0; baris < matrixP.RowCount; baris++) {

if (writtenByte < oriFileSize) {

writer.writeByte((int)matrixP[0, baris]); writtenByte++; } } } } } }

7. Class Knapsack

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO;

(19)

namespace hybrid.Lib {

class Knapsack {

public static String encrypt(int jlhW, string KunciPub, int

jnsMatrix, int[,] kunci, int nckey, String txtTujuanKey

, String txtQ, String txtR, String cbJumlahW, String txtKunciPrivate)

{

String temp = String.Empty; string kTempPub = ""; int indeks = 0;

int[] kPublic = new int[jlhW];

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

if (KunciPub.ElementAt(i) >= '0' && KunciPub.ElementAt(i) <= '9') { kTempPub += KunciPub.ElementAt(i); } else { if (kTempPub != "") { kPublic[indeks] = Convert.ToInt32(kTempPub); indeks++; kTempPub = ""; } else { } } } //int to Biner temp = "";

for (int i = 0; i < jnsMatrix; i++) {

for (int j = 0; j < jnsMatrix; j++) {

temp += Knapsack.int2bin(kunci[i, j], 8); }

}

//MessageBox.Show(temp.Text); //Pisah Menjadi Blok Biner indeks = 0;

kTempPub = "";

nckey = (temp.Length / jlhW); int counter = 0;

string[] sesiKeyCipher = new string[nckey];

//MessageBox.Show(temp.Text+" "+temp.TextLength); for (int i = 0; i < temp.Length; i++)

{

counter++;

if (counter == jlhW) {

(20)

sesiKeyCipher[indeks] = kTempPub; kTempPub = ""; indeks++; counter = 0; } else { kTempPub += temp.ElementAt(i); } }

//Perkalian Blok Cipher

int[] KeyCipher = new int[nckey]; temp = "";

for (int i = 0; i < nckey; i++) { KeyCipher[i] = 0; for (int j = 0; j < jlhW; j++) { if (sesiKeyCipher[i].ElementAt(j) == '1') KeyCipher[i] += kPublic[j]; } temp += KeyCipher[i].ToString() + " "; } // Simpan // @TODO!!! try {

FileStream teks = new FileStream(txtTujuanKey, FileMode.CreateNew, FileAccess.Write);

StreamWriter tulis = new StreamWriter(teks); tulis.WriteLine(txtQ); tulis.WriteLine(txtR); tulis.WriteLine(cbJumlahW); tulis.WriteLine(txtKunciPrivate); tulis.WriteLine(temp); tulis.Write(nckey.ToString()); tulis.Close(); teks.Close(); } catch { } return temp; }

public static string int2bin(int num, int jum) {

string bin = "";

for (int i = 0; i < jum; i++) { if (num % 2 == 1) { bin = "1" + bin; } else { bin = "0" + bin; } num = num / 2; } return bin; }

(21)

public static int bin2int(string bin) {

int num = 0, count = 0;

for (int i = (bin.Length - 1); i >= 0; i--) {

if (bin[i] == '1')

num += Knapsack.pangkat(2, count); count++;

}

return num; }

public static int pangkat(int a, int b) {

int hasil = 1;

for (int i = 1; i <= b; i++) {

hasil *= a; }

return hasil; }

public static Int64 bruteModulo(Int64 a, Int64 b, Int64 c) {

return (((a % c) * (b % c)) % c); }

public static String decrypt(String KunciPri, String cipher, String txt_Q, String txt_R)

{

String txt_CipherMatrix; int nckey = 0;

String temp = String.Empty; int n = 0;

string kTempPub; //string KunciPub; int indeks = 0;

int[] kPublic = new int[n]; indeks = 0;

kTempPub = ""; int counter = 0;

string[] sesiKeyCipher = new string[100]; int[] KeyCipher = new int[100];

temp = "";

int[] kPrivate = new int[100]; counter = indeks = 0;

kTempPub = "";

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

if (KunciPri.ElementAt(i) >= '0' && KunciPri.ElementAt(i) <= '9') { kTempPub += KunciPri.ElementAt(i); } else {

(22)

if (kTempPub != "") { kPrivate[indeks] = Convert.ToInt32(kTempPub); indeks++; kTempPub = ""; n++; } else { } } if (i == KunciPri.Length - 1) { if (kTempPub != "") { kPrivate[indeks] = Convert.ToInt32(kTempPub); indeks++; n++; kTempPub = ""; } else { } } } indeks = 0; kTempPub = "";

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

if (cipher.ElementAt(i) >= '0' && cipher.ElementAt(i) <=

'9') { kTempPub += cipher.ElementAt(i); } else { if (kTempPub != "") { KeyCipher[indeks] = Convert.ToInt32(kTempPub); indeks++; kTempPub = ""; nckey++; } else { } } if (i == cipher.Length - 1) { if (kTempPub != "") { KeyCipher[indeks] = Convert.ToInt32(kTempPub); indeks++; // MessageBox.Show(KeyCipher[i].ToString()); kTempPub = ""; } else { } } }

(23)

kTempPub = "";

for (int i = 0; i < n; i++) {

kTempPub += "1"; }

int kombinasi = (Knapsack.bin2int(kTempPub) + 1); string[] binKombi = new string[kombinasi];

for (int i = 0; i < kombinasi; i++) {

binKombi[i] = int2bin(i, n); }

//Biner Total Hasil Dekripsi

Int64 q = Convert.ToInt32(txt_Q), r = Convert.ToInt32(txt_R), nInv, k = 0;

while ((1 + (q * k)) % r != 0) k++;

nInv = (1 + (q * k)) / r;

int[] hasildekrip = new int[nckey]; //int temp1 = 0;

String hasildekripBin; hasildekripBin = "";

int nkey_temp = Convert.ToInt32(Math.Pow(2, n)); string[] dataBit = new string[nkey_temp];

int[] dataDec = new int[nkey_temp]; int n_bit = Convert.ToInt32(n); for (int i = 0; i < nkey_temp; i++) {

dataBit[i] = int2bin(i, n_bit); dataDec[i] = 0;

for (int j = 0; j < n_bit; j++) { dataDec[i] += (Convert.ToInt32(dataBit[i][j].ToString()) * kPrivate[j]); } } string hasilbittotal = ""; for (int i = 0; i < nckey; i++) {

hasildekrip[i] = Convert.ToInt32(bruteModulo(KeyCipher[i], nInv, q));

for (int j = 0; j < nkey_temp; j++) { if (hasildekrip[i] == dataDec[j]) { hasilbittotal += dataBit[j]; break; } } }

(24)

//MessageBox.Show("Hasil\n" + hasilbittotal); int[] hasil = new int[hasilbittotal.Length / 8]; indeks = counter = 0;

txt_CipherMatrix = ""; kTempPub = "";

for (int i = 0; i < hasilbittotal.Length; i++) { counter++; if (counter == 8) { kTempPub += hasilbittotal.ElementAt(i); hasil[indeks] = Knapsack.bin2int(kTempPub); txt_CipherMatrix += hasil[indeks].ToString() + " "; kTempPub = ""; indeks++; counter = 0; } else { kTempPub += hasilbittotal.ElementAt(i); } } return txt_CipherMatrix; } } }

8. Class Baca File

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace hybrid.Lib { class FileBitReader {

private String fileName; private FileStream fileIn;

private BufferedStream buffFileIn; public FileBitReader(String fileName) {

this.fileName = fileName;

fileIn = new FileStream(this.fileName, FileMode.Open); buffFileIn = new BufferedStream(fileIn);

}

public int readByte() {

return buffFileIn.ReadByte(); }

public long getFileSize() {

(25)

return buffFileIn.Length; }

public void close() { buffFileIn.Close(); fileIn.Close(); } } }

9. Class Tulis File

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace hybrid.Lib { class FileBitWriter {

private String fileName; private FileStream fileOut;

private BufferedStream buffFileOut; public FileBitWriter(String fileName) {

this.fileName = fileName;

fileOut = new FileStream(this.fileName, FileMode.Create); buffFileOut = new BufferedStream(fileOut);

}

public void writeByte(String str) {

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

char karakter = str[i];

byte toWrite = (byte) karakter; buffFileOut.WriteByte(toWrite); }

}

public void writeByte(byte b) {

buffFileOut.WriteByte(b); }

public void writeByte(int i) {

buffFileOut.WriteByte((byte) i); }

public void close() {

buffFileOut.Close(); fileOut.Close(); }

(26)

} }

10. Class Double Matrix

using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; namespace hybrid.Lib {

public class DoubleMatrix {

public double determinant() {

if (this.ColumnCount != this.RowCount) {

throw new Exception("Determinan berlaku pada matrix NxN"); } if (this.ColumnCount == 1) { return this[0, 0]; } if (this.ColumnCount != 2) {

throw new NotImplementedException("Fungsi hanya bisa melakukan determinant n=2");

}

int n = this.RowCount; if (n == 2) {

//(kunci[0, 0] * kunci[1, 1]) - (kunci[1, 0] * kunci[0, 1]);

return (this[0, 0] * this[1, 1]) - (this[0, 1] * this[1, 0]);

}

public DoubleMatrix adjoint() {

if (this.ColumnCount != this.RowCount) {

throw new Exception("Adjoint berlaku pada matrix NxN"); }

DoubleMatrix cofactor = new DoubleMatrix(this.ColumnCount,

this.RowCount);

for (int baris = 0; baris < this.RowCount; baris++ ) {

for (int kolom = 0; kolom < this.ColumnCount; kolom++ ) {

// ambil matrix yang sisa DoubleMatrix matrixSisa = new

DoubleMatrix(this.ColumnCount - 1, this.RowCount-1); int traceBaris = 0;

int traceKolom = 0;

for (int loopBaris = 0; loopBaris < this.RowCount; loopBaris++) {

(27)

for (int loopKolom = 0; loopKolom <

this.ColumnCount; loopKolom++) {

if (baris == loopBaris || kolom == loopKolom) { continue;

}

matrixSisa[traceKolom, traceBaris] =

this[loopKolom, loopBaris]; traceKolom++; if (traceKolom >= matrixSisa.ColumnCount) { traceKolom = 0; traceBaris++; } } }

cofactor[kolom, baris] = Math.Pow(-1, baris + kolom) * matrixSisa.determinant();

} }

return cofactor.Transposed; }

public void mod(int mod) {

for (int baris = 0; baris < this.RowCount; baris++) {

for (int kol = 0; kol < this.ColumnCount; kol++) {

this[kol, baris] = this[kol, baris] % mod; } } } } }

11. Class GCD

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace hybrid.Lib { class GCD {

public static long GCD1(long a, long b) { while (b != 0) { long tmp = b; b = a % b; a = tmp; } return a; } } }

(28)

TABEL ASCII

No Kode No Kode No Kode No Kode No Kode No Kode

0

44

,

88

X

132

Ä

176

220

1

45

-

89

Y

133

À

177

221

¦

2

46

.

90

Z

134

Å

178

222

Ì

3

47

/

91

[

135

Ç

179

223

4

48

0

92

\

136

Ê

180

224

α

5

49

1

93

]

137

Ë

181

Á

225

ß

6

50

2

94

^

138

È

182

Â

226

Γ

7

51

3

95

_

139

Ï

183

À

227

π

8

52

4

96

140

Î

184

©

228

Σ

9

53

5

97

a

141

Ì

185

229

σ

10

54

6

98

b

142

Ä

186

||

230

µ

11

55

7

99

c

143

Å

187

231

τ

12

56

8

100

d

144

É

188

232

Φ

13

57

9

101

e

145

Æ

189

¢

233

Θ

14

58

:

102

f

146

Æ

190

¥

234

Ω

15

59

;

103

g

147

Ô

191

235

δ

16

60

<

104

h

148

Ö

192

236

17

61

=

105

i

149

Ò

193

237

φ

18

62

>

106

j

150

Û

194

238

ε

19

63

?

107

k

151

Ù

195

239

20

64

@

108

l

152

Ÿ

196

240

21

§

65

A

109

m

153

Ö

197

241

±

22

66

B

110

n

154

Ü

198

ã

242

23

67

C

111

o

155

¢

199

Ã

243

24

68

D

112

p

156

£

200

244

(

25

69

E

113

q

157

¥

201

245

)

26

70

F

114

r

158

P

202

246

÷

27

71

G

115

s

159

Ƒ

203

247

28

72

H

116

t

160

Á

204

248

°

29

73

I

117

u

161

Í

205

249

·

30

74

J

118

v

162

Ó

206

250

·

31

75

K

119

w

163

Ú

207

¤

251

32

76

L

120

x

164

Ñ

208

ð

252

n

33

!

77

M

121

y

165

Ñ

209

Ð

253

²

(29)

No Kode No Kode No Kode No Kode No Kode No Kode

34

"

78

N

122

z

166

ª

210

Ê

254

35

#

79

O

123

{

167

º

211

Ë

255

36

$

80

P

124

|

168

¿

212

È

37

%

81

Q

125

}

169

¬

213

ı

38

&

82

R

126

~

170

¬

214

Í

39

:'

83

S

127

Ç

171

½

215

Î

40

:(

84

T

128

Ü

172

¼

216

Ï

41

)

85

U

129

É

173

¡

217

42

*

86

V

130

Â

174

«

218

43

+

87

W

131

Ä

175

»

219

Keterangan :

No

: Nilai

byte

(30)

CURRICULUM VITAE

DETAIL PROFIL

Nama Lengkap

: Marlina Sihombing

Alamat Sekarang

: Jln.Berdikari No 88 Pasar 1 Padang Bulan

Alamat Orangtua

: Pangaribuan, Kabupaten Tapanuli Utara

Telp/Handphone

: - / 082304593490

e-mail

:hannasihombing90@gmail.com/marlina_sihombing@usu.ac.id

PendidikanTerakhir

: Strata 1 (S1)

RIWAYAT PENDIDIKAN FORMAL

NAMASEKOLAH

JURUSAN

LOKASI

KETERANGAN

S1

Universitas Sumatera

Utara

S1 IlmuKomputer Medan

2009-2014

SMA SMA Negeri 1

Pangaribuan

IPA

Pangaribuan 2005-2008

SMP SMP Negeri 1

Pangaribuan

-

Pangaribuan 2002-2005

SD

LumbanSormin

-

Pangaribuan 1996-2002

KEMAMPUAN DI DALAM BIDANG KOMPUTER

Pemrograman

: Bahasa Pemograman PHP

: Bahasa Pemrograman C#, Basic.net (Beginner)

DBMS

: Menggunakan MySQL (Intermediate)

(31)

KEMAMPUAN BAHASA ASING

BahasaInggris

: Listen (Passive)

: Writing (Active)

: Reading (Active)

ORGANISASI YANG TELAH DIIKUTI

SEBAGAI

ORGANISASI

TAHUN

ANGGOTA IMILKOM (Ikatan Mahasiswa Ilmu Komputer)

2009-SKRG

ANGGOTA

ANGGOTA

KMKI (Komunitas Mahasiswa Kristen Ilmu

Komputer)

Paduan Suara El-Shaddai USU

2009-SKRG

2010-2012

SEMINAR YANG TELAH DIIKUTI

SEBAGAI

SEMINAR

PESERTA

SEMINAR TEKNOLOGI INFORMASI

“The Development of Modern Operating System Technology : Android – The

New Trend in Modern Operating System”

Di Universitas Sumatera Utara (2011)

PESERTA

SEMINAR TEKNOLOGI INFORMASI

“Internet Masa Depan : Prospek dan Tantangannya”

Di Universitas Sumatera Utara (2009)

PESERTA

PESERTA

WORKSHOP TEKNOLOGI INFORMASI

“Graphic Design: Unlimited”

Di Universitas Sumatera Utara (2010)

WORKSHOP TEKNOLOGI INFORMASI

“Teknik Dasar Fotografi”

Gambar

TABEL ASCII

Referensi

Dokumen terkait

Mastering of Science Biology and learning professionals Biology to carry out the study of Biology is one of Biology education program goals.The rapid growth

Ginting, Keristina, 2008 Peralihan Mata Pencaharian dari Sektor Pariwisata ke Sektor Peternakan Ikan (skripsi):USU Repository , diakses pada Kamis, 08 Februari 2017, pukul 21.00

Penggunaan model pembelajaran Teams Games Tournaments (TGT) terbukti dapat meningkatkan pemahaman siswa pada Dampak Globalisasi di Berbagai Bidang yang

Setelah data sudah di input maka pihak pimpinan (pemilik toko) dapat mengakses serta mengunduh file laporan data barang beserta transaksi pada sistem inventori.. Admin

Perlu lokasi yang tepat dan agak jauh dari perempatan dibuat fasilitas halte yang menjorok ke tepi luar agar manfaat jalan tidak berkurang.. Tiang lampu yang berada di manfaat

Neila Ramdhani, Fakultas Psikologi Universitas Gadjah Mada. Avin Fadilla Helmi, Fakultas Psikologi Universitas

Kompetisi antar kandidat dalam Pilihan gubernur Jateng 2013, yang berlomba mendongkrak elektabilitas menarik untuk diteliti dan dikaji. Untuk terpilih menjadi pemimpin,

[r]