Implementasi Algoritma Knapsack dan Algoritma Boldi-Vigna (ζ4) Pada Keamanan dan Kompresi File Teks

A-1

LISTING PROGRAM

1. Knapsack
public class Classknapsack{
void Btn_KRClick(object sender, EventArgs e) {
richTextBox1.Text = null;
int distance = Convert.ToInt32(textDistance.Text);
int inc = 0,temp;
w[0] = Convert.ToInt32(textW1.Text);
w[1] = Convert.ToInt32(textW2.Text);
temp = w[0] + w[1];
for (int i = 2; i < w.Length -1; i++){
w[i] = distance + inc + temp;
inc++;
temp = temp + w[i];
}
w[7] = distance + temp;
for (int i = 0; i < w.Length; i++){
richTextBox1.Text = richTextBox1.Text + w[i] + "\n";

}
}
public static int[] GetPublicKey(int[] w, int q, int r){
int[] beta = new int[w.Length];
for(int i = 0; i < w.Length; i++) beta[i] = w[i] * r % q;
return beta;
}
public static int[] Encrypt(string plainText, int[] beta){
if (String.IsNullOrEmpty(plainText)) return null;
int[] encoded = new int[plainText.Length];
for(int i = 0; i < encoded.Length; i++){
string bin = ConvertToBinary(plainText[i]);
int sum = 0;
for(int j = 0; j < 8; j++) sum += (bin[j] - 48) * beta[j];
encoded[i] = sum;
}
return encoded;
}
public static string Decrypt(int[] encoded, int[] w, int q,int
r{

if (encoded == null || encoded.Length == 0) return null;
char[] chars = new char[encoded.Length];
int mir = ModInverse(r, q);
if (mir == 0) {
Console.WriteLine("Modular inverse does not exist.
Decryption aborted");
return null;
}

Universitas Sumatera Utara

A-2

for(int i = 0; i < encoded.Length; i++){
char[] bin = new char[8];
for(int j = 0; j < 8; j++) bin[j] = '0';
int temp = encoded[i] * mir % q;
while(temp > 0) {
int index = 7;
for(int j = 1; j < w.Length; j++){

if(w[j] > temp) {
index = j - 1;
break;
}
}
bin[index] = '1';
temp -= w[index];
}
chars[i] = ConvertFromBinary(new string(bin));
}
return new string(chars);
}
public static int ModInverse(int r, int q) {
int i = q, v = 0, d = 1;
while (r > 0) {
int t = i/r, x = r;
r = i % x;
i = x;
x = d;
d = v - t * x;

v = x;
}
v %= q;
if (v < 0) v = (v+q) % q;
return v;
}
}

//Pemanggilan class Knapsack
void Btn_KPClick(object sender, EventArgs e) {
richTextBox2.Text = null;
m = Convert.ToInt32(textm.Text);
n = Convert.ToInt32(textn.Text);
if(n>50)
MessageBox.Show("n harus lebih kecil dari 51");
else{
int mir = Classknapsack.ModInverse(n, m);
if (mir == 0) {
MessageBox.Show("syarat m dan n tidak memenuhi");
}

else{
beta = Classknapsack.GetPublicKey(w, m, n);
for (int i = 0; i < w.Length; i++){
richTextBox2.Text = richTextBox2.Text + beta[i] + "\n";
}
}

Universitas Sumatera Utara

A-3

}
}
void Btn_generateClick(object sender, EventArgs e) {
int temp = 0;
for (int i = 0; i < w.Length; i++){
temp = temp + w[i];
}
textm.Text = (temp + 5).ToString();
}

void Button1Click(object sender, EventArgs e)
{
richTextBox4.Text = null;
watch.Start();
int[] encoded =
Classknapsack.Encrypt(richTextBox1.Text, beta);
watch.Stop();
for(int i = 0;i fr[j]) {
int frtemp = fr[i];
fr[i] = fr[j];
fr[j] = frtemp;
char sbtemp = sb[i];
sb[i] = sb[j];
sb[j] = sbtemp;
}
cs = sb.ToString();
}

Universitas Sumatera Utara


A-5

public static void boldivigna(String st)
{
int[] freq = CountFreq(st);
String charset = GetCharSet(st);
int t = charset.Length;
InsertionSort(freq, charset);
freq = fr;
charset = cs;
bolvig = new String[t];
for (int i = 0; i < t; i++){
bolvig[i] = tabelbolvig[i];
}
}

//Pemanggilan Class Boldi-Vigna
void Button3Click(object sender, EventArgs e) {
watch.Start();
String dc = classboldivigna.Decode(richTextBox1.Text);

String ds = classboldivigna.Decompress(dc, cs, bolvig);
richTextBox4.Text = ds.Substring(0,ds.Length-1);
watch.Stop();
textBox7.Text =
Math.Round(Convert.ToDecimal(watch.ElapsedMilliseconds)/1000,4
).ToString()+" s";
textBox8.Text = richTextBox4.Text.Length.ToString();
MessageBox.Show("file berhasil didekompresi");
}
void Btn_enkomClick(object sender, EventArgs e)
{
richTextBox3.Text = null;
watch.Start();
String kalimat = richTextBox4.Text;
classboldivigna.boldivigna(kalimat);
String stb =
classboldivigna.StringToStb(kalimat,classboldivigna.cs,classbol
divigna.bolvig);
String code = classboldivigna.Encode(stb);
watch.Stop();

richTextBox3.Text = code;
textBox3.Text =
Math.Round(Convert.ToDecimal(watch.ElapsedMilliseconds)/1000,4)
.ToString()+" s";
textBox4.Text = richTextBox3.Text.Length.ToString();
MessageBox.Show("file berhasil dikompresi");
}

Universitas Sumatera Utara

B-1

CURRICULUM VITAE

1. Biodata
Nama

: Erna Lestari

Nim


: 121401024

Alamat Sekarang

: Jln. Air Bersih Ujung, Perumahan D’Green
Townhouse no.3, Medan

Alamat Orang Tua

: Lingk.Kebun Sayur, Sigambal,
Rantau Selatan

Telp/ Hp

: 085276472532

2. Riwayat Pendidikan
2012 – 2016


: S1 Ilmu Komputer Universitas Sumatera Utara, Medan

2009 – 2012

: SMA Negeri 2 Rantau Selatan

2006 – 2009

: SMP Swasta Muhammadiyah-35 Sigambal

2000 – 2006

: SD Negeri 114376 Kebun Sayur

3. Keahlian
Pemrograman

: C#, MATLAB

Database

: MySql

Design

: Photoshop, Corel Draw

Perkantoran

: Microsoft Office

4. Pengalaman Organisasi
[2012 – 2013]

: Anggota Himpunan Mahasiswa Labuhanbatu

[2012 – 2014]

: Anggota Ikatan Mahasiswa Ilmu Komputer

Universitas Sumatera Utara

B-2

6. Seminar
[2014]
[2014]
[2015]

: Seminar Internasional Youth Convention
: Seminar Nasional Literasi Informasi “SENARAI”
: Seminar Sosialisasi Toward ASEAN Community 2015:
ASEAN Goes to Campus

Universitas Sumatera Utara