Implementasi Modified LSB (Least Significant Bit) dan Algoritma DES (Data Encryption Standard) Pada Pengamanan Data Text

(1)

LISTING PROGRAM 1. Form1.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using IronPython.Hosting; using Microsoft.Scripting; using Microsoft.Scripting.Hosting; using System.IO; using System.Diagnostics; using System.Windows.Forms; using System.Drawing; namespace program {

public partial class Form1 : Form {

public string imgPath; public string paddedImgPath; public string cipherteks; DateTime awal; DateTime akhir; TimeSpan total; public Form1() { InitializeComponent(); }

private void button1_Click(object sender, EventArgs e) {

DateTime awal; DateTime akhir; TimeSpan total; int waktupenyisipan; awal = DateTime.Now;

if (ekskey.Text == "" || ekskey.Text == "12345678" || ekskey.Text == "enkripsi")

{

MessageBox.Show("kunci tidak boleh kosong!", "Peringatan!", MessageBoxButtons.OK, MessageBoxIcon.Error);

} else {

Process p = new Process(); // create process (i.e., the python program

p.StartInfo.FileName = "C:\\Python27\\python.exe"; p.StartInfo.RedirectStandardOutput = true;

p.StartInfo.UseShellExecute = false; // make sure we can read the output from stdout

p.StartInfo.Arguments = "internal_key.py " + ekskey.Text; // start the python program with two parameters

p.Start(); // start the process (the python program) StreamReader s = p.StandardOutput;


(2)

string[] r = output.Split(new char[] { ' ' }); // get the parameter

string q = r[0];

//string[] words = q.Split('.'); intkey.Text = output;

p.WaitForExit(); akhir = DateTime.Now; total = akhir - awal;

waktupenyisipan = Convert.ToInt32(total.TotalMilliseconds); MessageBox.Show("Waktu pembangkitan kunci adalah: " + waktupenyisipan + " ms.");

} }

private void button3_Click(object sender, EventArgs e) {

DateTime awal; DateTime akhir; TimeSpan total; int waktupenyisipan; awal = DateTime.Now;

Process p = new Process(); // create process (i.e., the python program

p.StartInfo.FileName = "C:\\Python27\\python.exe"; p.StartInfo.RedirectStandardOutput = true;

p.StartInfo.UseShellExecute = false; // make sure we can read the output from stdout

p.StartInfo.Arguments = "enkripsi_pesan.py " +

plainText.Text.Replace(' ', '_') + " " + ekskey.Text;// start the python program with two parameters

p.Start(); // start the process (the python program) StreamReader s = p.StandardOutput;

String output = s.ReadToEnd();

string[] r = output.Split(new char[] { ' ' }); // get the parameter string q = r[0];

//string[] words = q.Split('.'); cipherText.Text = output;

cipherteks = output; p.WaitForExit(); akhir = DateTime.Now; total = akhir - awal;

waktupenyisipan = Convert.ToInt32(total.TotalMilliseconds); MessageBox.Show("Waktu enkripsi adalah: " + waktupenyisipan + " ms.");

}

private void button2_Click(object sender, EventArgs e) {

try {

plainText.Text="";

OpenFileDialog bukaPlainText = new OpenFileDialog(); bukaPlainText.InitialDirectory = "";

bukaPlainText.Filter = "File Text (*.txt)|*.txt"; bukaPlainText.FilterIndex = 1;

bukaPlainText.RestoreDirectory = true;

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


(3)

StreamReader objReader = new StreamReader(bukaPlainText.FileName);

baca_teks = objReader.ReadLine(); while (baca_teks != null)

{

plainText.Text += baca_teks; baca_teks = objReader.ReadLine(); }

objReader.Close(); }

}

catch (Exception ex) {

MessageBox.Show("Terjadi Kesalah pada \n- " + ex.ToString()); }

}

private void button5_Click(object sender, EventArgs e) {

OpenFileDialog theDialog = new OpenFileDialog(); theDialog.Title = "Open Image File";

theDialog.Filter = "PNG(*.png)|*.png"; theDialog.InitialDirectory = @"D:\"; theDialog.ShowDialog();

if (theDialog.FileName.ToString() != "") {

Image image = Image.FromFile(theDialog.FileName.ToString()); pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox1.Image = image;

imgPath = theDialog.FileName.ToString();

MessageBox.Show("Citra berhasil diimport!", "Informasi!", MessageBoxButtons.OK, MessageBoxIcon.Information);

} }

private void button14_Click_1(object sender, EventArgs e) {

DateTime awal; DateTime akhir; TimeSpan total; int waktupenyisipan; awal = DateTime.Now;

if (eksdek.Text == "" || eksdek.Text == "12345678" || eksdek.Text == "enkripsi")

{

MessageBox.Show("kunci tidak boleh kosong!", "Peringatan!", MessageBoxButtons.OK, MessageBoxIcon.Error);

} else {

Process p = new Process(); // create process (i.e., the python program

p.StartInfo.FileName = "C:\\Python27\\python.exe"; p.StartInfo.RedirectStandardOutput = true;

p.StartInfo.UseShellExecute = false; // make sure we can read the output from stdout

p.StartInfo.Arguments = "internal_key.py " + eksdek.Text; // start the python program with two parameters


(4)

StreamReader s = p.StandardOutput; String output = s.ReadToEnd();

string[] r = output.Split(new char[] { ' ' }); // get the parameter

string q = r[0];

//string[] words = q.Split('.'); intdek.Text= output;

p.WaitForExit(); p.WaitForExit(); akhir = DateTime.Now; total = akhir - awal;

waktupenyisipan = Convert.ToInt32(total.TotalMilliseconds); MessageBox.Show("Waktu pembangkitan kunci adalah: " + waktupenyisipan + " ms.");

} }

private void button12_Click_1(object sender, EventArgs e) {

DateTime awal; DateTime akhir; TimeSpan total; int waktupenyisipan; awal = DateTime.Now;

Process p = new Process(); // create process (i.e., the python program

p.StartInfo.FileName = "C:\\Python27\\python.exe"; p.StartInfo.RedirectStandardOutput = true;

p.StartInfo.UseShellExecute = false; // make sure we can read the output from stdout

p.StartInfo.Arguments = "dekripsi_pesan.py " + imgPath + " " + eksdek.Text;// start the python program with two parameters

p.Start(); // start the process (the python program) StreamReader s = p.StandardOutput;

String output = s.ReadToEnd();

string[] r = output.Split(new char[] { ' ' }); // get the parameter string q = r[0];

//string[] words = q.Split('.'); plaindek.Text = output;

p.Close();

akhir = DateTime.Now; total = akhir - awal;

waktupenyisipan = Convert.ToInt32(total.TotalMilliseconds); MessageBox.Show("Waktu dekripsi adalah: " + waktupenyisipan + " ms.");

}

private void button6_Click(object sender, EventArgs e) {

DateTime awal; DateTime akhir; TimeSpan total; int waktupenyisipan; awal = DateTime.Now;

Process p = new Process(); // create process (i.e., the python program

p.StartInfo.FileName = "C:\\Python27\\python.exe"; p.StartInfo.RedirectStandardOutput = true;


(5)

p.StartInfo.UseShellExecute = false; // make sure we can read the output from stdout

p.StartInfo.Arguments = "imgPadding.py " + imgPath + " " + ekskey.Text + " " + plainText.Text.Replace(' ', '_');// start the python program with two parameters

p.Start(); // start the process (the python program) StreamReader s = p.StandardOutput;

String output = s.ReadToEnd();

string[] r = output.Split(new char[] { ' ' }); // get the parameter string q = r[0];

string[] words = q.Split('.'); paddedImgPath = words[0];

FileStream fs = new FileStream(words[0] + ".png", FileMode.Open); Image image = Image.FromStream(fs);

pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox2.Image = image;

fs.Close();

akhir = DateTime.Now; total = akhir - awal;

waktupenyisipan = Convert.ToInt32(total.TotalMilliseconds); MessageBox.Show("Pesan Berhasil disisipkan!", "Informasi!", MessageBoxButtons.OK, MessageBoxIcon.Information);

MessageBox.Show("Waktu penyisipan adalah: " + waktupenyisipan + " ms.");

p.Close(); }

private void button10_Click(object sender, EventArgs e) {

OpenFileDialog theDialog = new OpenFileDialog(); theDialog.Title = "Open Image File";

theDialog.Filter = "PNG(*.png)|*.png"; theDialog.InitialDirectory = @"D:\"; theDialog.ShowDialog();

if (theDialog.FileName.ToString() != "") {

Image image = Image.FromFile(theDialog.FileName.ToString()); pictureBox4.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox4.Image = image;

imgPath = theDialog.FileName.ToString();

MessageBox.Show("Citra berhasil diimport!", "Informasi!", MessageBoxButtons.OK, MessageBoxIcon.Information);

} }

private void button9_Click(object sender, EventArgs e) {

DateTime awal; DateTime akhir; TimeSpan total; int waktupenyisipan; awal = DateTime.Now;

Process p = new Process(); // create process (i.e., the python program

p.StartInfo.FileName = "C:\\Python27\\python.exe"; p.StartInfo.RedirectStandardOutput = true;

p.StartInfo.UseShellExecute = false; // make sure we can read the output from stdout


(6)

p.StartInfo.Arguments = "imgExtractMsg.py " + imgPath;// start the python program with two parameters

p.Start(); // start the process (the python program) StreamReader s = p.StandardOutput;

String output = s.ReadToEnd();

string[] r = output.Split(new char[] { ' ' }); // get the parameter string q = r[0];

string[] words = q.Split('.'); chipdek.Text = words[0]; akhir = DateTime.Now; total = akhir - awal;

waktupenyisipan = Convert.ToInt32(total.TotalMilliseconds); MessageBox.Show("Pesan berhasil diekstrak!", "Informasi!", MessageBoxButtons.OK, MessageBoxIcon.Information);

MessageBox.Show("Waktu ekstrsi adalah: " + waktupenyisipan + " ms.");

p.Close(); }

private void button1_Click_1(object sender, EventArgs e) {

ekskey.Text = ""; plainText.Text = ""; intkey.Text = ""; cipherText.Text = ""; pictureBox1.Image = null; pictureBox2.Image = null; }

private void label7_Click(object sender, EventArgs e) {

}

private void button2_Click_1(object sender, EventArgs e) {

eksdek.Text = ""; chipdek.Text = ""; plaindek.Text = ""; intdek.Text = "";

pictureBox4.Image = null; } } } 2. Function.py import binascii import Image def ascii_to_bit(message):

return bin(int(binascii.hexlify(message), 16)).replace("b", "").rjust(8,'0')

def bit_to_ascii(bit): ascii = '';

for i in range(0, len(bit), 8): n = int(bit[i:i+8], 2)

ascii += binascii.unhexlify('%x' %n) return ascii


(7)

def divide_side(message_bit): i = 0

left = "" right = ""

half_size = len(message_bit)/2; while (i < half_size):

left = left + message_bit[i];

right = right + message_bit[i+half_size]; i+=1

return left,right

def get_key_plus_bit(key_bit):

pc_1 = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22,14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4] key_plus_bit = []

for i in range(0, len(pc_1)):

key_plus_bit.append(key_bit[pc_1[i]-1]) return key_plus_bit

def shift_bit(pre_bit, num_of_shift): for i in range(num_of_shift): temp_bit = pre_bit[0] pre_bit = pre_bit[1:] pre_bit += temp_bit return pre_bit

def right_shift_bit(pre_bit, num_of_shift): for i in range(num_of_shift):

temp_bit = pre_bit[27] pre_bit = pre_bit[:27] pre_bit = temp_bit + pre_bit return pre_bit

def get_c1_to_c16(c, d):

shift = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1] for i in range(16):

c.append(shift_bit(c[i], shift[i])) d.append(shift_bit(d[i], shift[i])) return c, d

def join(c, d):

key_plus_block = [] for i in range(17):

key_plus_block.append(c[i]+d[i]) return key_plus_block

def get_key_plus_bit_2(cd_block):

pc_2 = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32]

key_plus_bit_2 = []

for i in range(1, len(cd_block)): cd_temp = ""

for j in range (0, len(pc_2)):

cd_temp += cd_block[i][pc_2[j]-1]; key_plus_bit_2.append(cd_temp)

return key_plus_bit_2


(8)

ip = [58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7];

message_permutation_1 = "" for i in range(0, len(ip)):

message_permutation_1 += message[ip[i]-1]; return message_permutation_1

def e_bit(message):

e = [32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1];

e_bit = ""

for i in range(0,len(e)): e_bit += message[e[i]-1]; return e_bit

def xor_bit(e_rn,kn, x): result_bit = ""

for i in range (0,len(e_rn)):

result_bit += xor(e_rn[i], kn[x][i]) return result_bit

def xor(bit1, bit2): if(bit1 == '1'): if(bit2=='1'): return'0' else: return'1' else: if(bit2=='1'): return '1' else: return'0' def b_n(k_xor): b_n = [];

for i in range (0, len(k_xor), 6): temp = ""

for j in range(i, i + 6): temp += k_xor[j] b_n.append(temp) return b_n

def s_n(b_n, i, s):

row = int(b_n[i][0]+b_n[i][5], 2)

column = int(b_n[i][1]+b_n[i][2]+b_n[i][3]+b_n[i][4], 2) return bin(s[row][column]).replace("0b", "").zfill(4);

def f(s_box):

p = [16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25];

temp = ""

for i in range(0, len(p)): temp+=(s_box[p[i]-1]) return temp

def rn(ln_min1, f): temp = ""


(9)

temp += xor(ln_min1[i], f[i]) return temp

def lnrn(kn, x, l, r): e = e_bit(r)

m = xor_bit(e, kn, x)

b = b_n(m)

s1 = [[14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7],[0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8],[4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0],[ 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13]];

s2 = [[15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10],[ 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5],[0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15],[13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9]];

s3 = [[10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8],[13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1],[13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7], [1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12]];

s4 = [[7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15], [13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9], [10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4], [3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14]];

s5 = [[2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9], [14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 16], [4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14], [11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3]];

s6 = [[12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11], [10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8], [9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6], [4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13]];

s7 = [[4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1], [13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6], [1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2], [6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12]];

s8 =[[13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7], [1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2], [7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8], [2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11]];

s1b1 = s_n(b, 0, s1) s2b2 = s_n(b, 1, s2) s3b3 = s_n(b, 2, s3) s4b4 = s_n(b, 3, s4) s5b5 = s_n(b, 4, s5) s6b6 = s_n(b, 5, s6) s7b7 = s_n(b, 6, s7) s8b8 = s_n(b, 7, s8)

s_box = s1b1 + s2b2 + s3b3 + s4b4 + s5b5 + s6b6 + s7b7 + s8b8

f_var = f(s_box) result = rn(l, f_var) return result


(10)

ip_inv = [40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25];

temp = [];

for i in range(0, len(ip_inv)): temp.append(rnln[ip_inv[i]-1]); encrypt_m_bit = ''.join(temp) return encrypt_m_bit

def get_img_res(imgPath, param): if(param == 'height'): param = 0

else:

param = 1

img = Image.open(imgPath) imgSize = img.size return imgSize[param] def get_img_px(imgPath): img = Image.open(imgPath) imgPx = img.load()

x = get_img_res(imgPath, 'height'); # x -> height y = get_img_res(imgPath, 'width'); # y -> width plainPx = []

for i in range (x):

for j in range (y): plainPx.append(imgPx[i, j]) return plainPx

# Get blue pixels from image for padding process def get_bluePx0(rgbaPx):

bluePx = []

for i in range (0, len(rgbaPx)): bluePx.append(rgbaPx[i][2]) return bluePx

# Get blue pixels from image to get padded message def get_bluePx1(rgbaPx):

bluePx = []

for i in range (0, len(rgbaPx)):

if(rgbaPx[i][3] == 0): # If alpha 0, that's the message limit break

bluePx.append(rgbaPx[i][2]) return bluePx

def pad_bluePx(bluePx, msgBit): blueBit = []

for i in range(0, len(msgBit)):

bluePxList = list(bin(bluePx[i]).replace("0b", "")) bluePxList[len(bluePxList)-1] = msgBit[i]

joinedBluePx = ''.join(bluePxList) newBluePx = int(joinedBluePx, 2) blueBit.append(newBluePx)

return blueBit

def set_bluePx_in_plainPx(blue_pixel, plain_pixel): temp = []

for i in range(0, len(blue_pixel)): temp = list(plain_pixel[i]) temp[2] = blue_pixel[i]


(11)

plain_pixel[i] = temp return plain_pixel

def extract_bluePx(bluePx): msgBit = ''

for i in range(0, len(bluePx)):

bluePxList = list(bin(bluePx[i]).replace("0b", "")) msgBit += bluePxList[len(bluePxList)-1]

return msgBit

def create_png(imgPath, rgbaPx, imgName, msgLength): x = get_img_res(imgPath, 'height')# x -> height y = get_img_res(imgPath, 'width')# y -> width img = Image.new('RGBA', (x, y), 'white') k = 0

for i in range(x): for j in range(y): R = rgbaPx[k][0] G = rgbaPx[k][1] B = rgbaPx[k][2] if( k == msgLength ): A = 0

else: A = 255

img.putpixel((i, j), (R, G, B, A)) k += 1

return img.save(imgName, 'PNG') def get_key_bin(key):

key_bin = ascii_to_bit(key)

key_bin_pc1 = get_key_plus_bit(key_bin) key_bin_div = divide_side(key_bin_pc1) c0 = key_bin_div[0]

d0 = key_bin_div[1] c = [c0]

d = [d0]

key_bin_c1_c16 = get_c1_to_c16(c, d) c0 = key_bin_c1_c16[0]

d0 = key_bin_c1_c16[1] key_bin_join = join(c0,d0)

key_bin_pc2 = get_key_plus_bit_2(key_bin_join) return key_bin_pc2

def encrypt_m(key_bin_pc2, message): message_bin = ''

for i in range(0, 8):

temp_bin = ascii_to_bit(message[i]) message_bin += temp_bin

ip1 = message_permutation_1(message_bin)

message_divide = divide_side(ip1) l0 = message_divide[0]

r0 = message_divide[1] ln = l0

rn = r0 x = 0

while(x < 16): r_temp = rn


(12)

rn = lnrn(key_bin_pc2, x, ln, rn) ln = r_temp

x += 1

rnln = str(rn) + str(ln)

joined_c = "" c = ip_min(rnln) joined_c += c return joined_c

def get_cipher_message(key_bin_pc2, message): padded_m = ''

for i in range(0, len(message), 8): char_length = len(message[i:i+8]) if ( char_length < 8 ):

padded_m += message[i:i+char_length].ljust(8,' ') else:

padded_m += message[i:i+8].ljust(8,' ')

message = padded_m join_e_m = ''

for i in range(0, len(message), 8):

join_e_m += encrypt_m(key_bin_pc2,message[i:i+8]) return join_e_m

def decrypt_m(key_bin_pc2, message_bin): ip1 = message_permutation_1(message_bin)

message_divide = divide_side(ip1) l0 = message_divide[0]

r0 = message_divide[1] ln = l0

rn = r0 x = 15

while(x >- 1): r_temp = rn

rn = lnrn(key_bin_pc2, x, ln, rn) ln = r_temp

x -= 1

rnln = str(rn) + str(ln)

joined_c = "" c = ip_min(rnln) joined_c += c return joined_c

def get_plain_message(key_bin_pc2, message): join_e_m = ''

for i in range(0, len(message), 64):

join_e_m += decrypt_m(key_bin_pc2, message[i:i+64]) return join_e_m


(13)

3. Internal_key.py from function import * import sys

#mengambil nilai dari argument ekskey.text key = sys.argv[1]

key_bin_pc2 = get_key_bin(key) print str(key_bin_pc2)

4. Enkripsi_pesan.py from function import * import binascii

import sys

message = sys.argv[1].replace('_', ' '); key = sys.argv[2]

key_bin_pc2 = get_key_bin(key)

print get_cipher_message(key_bin_pc2, message)

5. ImgPadding.py from function import * import sys

imgPath = sys.argv[1] key = sys.argv[2]

message = sys.argv[3].replace('_', ' '); key_bin_pc2 = get_key_bin(key)

joined_c = get_cipher_message(key_bin_pc2, message) msgBit = joined_c

msgLength = len(msgBit) plainPx = get_img_px(imgPath) bluePx = get_bluePx0(plainPx)

paddedBluePx = pad_bluePx(bluePx, msgBit)

paddedPlainPx = set_bluePx_in_plainPx(paddedBluePx, plainPx) imgName = "D:\\PaddedImage.png"

create_png(imgPath, paddedPlainPx, imgName, msgLength) print imgName


(14)

6. Dekripsi_pesan.py from function import * import binascii

import sys

key = sys.argv[2] imgPath = sys.argv[1]

key_bin_pc2 = get_key_bin(key) plainPx = get_img_px(imgPath) bluePx = get_bluePx1(plainPx) message = extract_bluePx(bluePx)

plain_bit = get_plain_message(key_bin_pc2, message) print bit_to_ascii(plain_bit)

7. ImgExtractMsg.py from function import * import sys

imgPath = sys.argv[1]

plainPx = get_img_px(imgPath) bluePx = get_bluePx1(plainPx) msgBit = extract_bluePx(bluePx) print str(msgBit)


(15)

CURRICULUM VITAE

--- Data Pribadi

Nama : Hengky Prayson Fangaro Gulo Tempat/Tanggal Lahir : Gunung Sitoli / 28 Agustus 1992 Tinggi/Berat Badan : 169 cm / 100 kg

Agama : Kristen Protestan Kewarganegaraan : Indonesia

Alamat : Jl. Jahe 6 no.2 Perumnas Simalingkar Medan Alamat Orang Tua : Jl. Jahe 6 no.2 Perumnas Simalingkar Medan Telp/ Hp : 085362402072

Email : hengkygulo@gmail.com

--- Riwayat Pendidikan

[2010 – 2016] : S1 Ilmu Komputer Universitas Sumatera Utara, Medan [2007 – 2010] : SMK Negeri 9 Medan

[2004 – 2007] : SMP Negeri 10 Medan


(16)

--- Keahlian/Kursus

Keahlian Komputer Bahasa :

Pemrograman :Pyhton, C#, C++ English

Database : MySQL Indonesia


(17)

Daftar Pustaka

Anggraini, Siska.2012.Implementasi Sistem Keamanan Data Menggunakan Algoritma RSA dan Modified LSB.Skripsi.Universitas Sumatera Utara

Batten, Lynn M.2013.Public Key cryptography Applications and Attacks.IEEE press.USA

Gabriel,Stephen, Waweru, 2012, An enhanced Least Significant Bit Steganographic Method for Information Hiding, Journal of Information Engineering and Applications, Vol 2, No.9:1-11.

Kromodimoeljo, Sentot. 2010. Teori dan Aplikasi Kriptografi. SPK IT Consulting : Jakarta.

Kipper,Gregory.2004.Invetigator’s Guide To Steganography.A CRC Press Company.London

Kadir, A. & Susanto A. 2013. Teori dan Aplikasi Pengolahan Citra. Yogyakarta ANDI: Yogyakarta.

Mollin, Richard a. 2007. An Introduction To Cryptography 2nd. Chapman & Hall : London

Miano, John. 2004. Compressed image file formats : JPEG, PNG, GIF, XBM, BMP. Canada: ACM Press

Munir, Rinaldi. 2004. Pengolahan Citra. Bandung Penerbit Informatika

Schneier, Bruce. 1996. Applied Cryptography : Protocols, Algorithms, and Source Code in C. 2nd Edition. John Wiley & Sons, Inc: New Jersey.

Sadikin, Rifki. 2012. Kriptografi Untuk Keamanan Jaringan. Penerbit ANDI: Yogyakarta.

Vijayakumar. Soniya.2011. Image Steganography Based On Polynomial Functions. Journal of Global Research in Computer Science.Volume 2 no 3:13-15.

Grabbe, J.O.2006.The DES algorithm Illustrated.(online).http://page.math.tu-berlin.de/~kant/teaching/hess/krypto-ws2006/des.htm.(1 maret 2015)


(18)

ANALISIS DAN PERANCANGAN

3.1. Analisis Sistem

Analisis sistem merupakan fase awal pada pengembangan sistem yang bertujuan untuk memahami dan mempelajari masalah yang akan diselesaikan oleh suatu sistem. Dan juga untuk merancang sistem sesuai dengan kebutuhan pengguna (user). Dengan adanya analisis terhadap suatu sistem diharapkan agar suatu sistem atau apilkasi dapat berjalan dengan baik dan sesuai dengan kebutuhan.

3.1.1. Analisis Masalah

Masalah yang akan diselesaikan pada penelitian ini adalah bagaimana cara meningkatkan keamanan dan melindungi suatu data dari pihak ketiga. Dan untuk meningkatkan keamanan suatu data maka diperlukan teknik pengamanan data yaitu dengan teknik kriptografi dan steganografi. Pada penelitian ini algoritma kriptografi yang digunakan adalah algoritma DES (Data Encryption Standard) dan teknik steganogarfi yang digunakan adalah metode LSB(Least Significant Bit) yang akan dimodifikasi.

Adapun masalah-masalah yang diketahui akan diidentifikasi dalam bentuk diagram Ishikawa, diagram Ishikawa disebut juga diagram sebab akibat. Pada gambar 3.1 akan menunjukkan diagram Ishikawa dari penelitian ini.


(19)

Gambar 3.1. Diagram Ishikawa

Pada gambar 3.1. menunjukkan permasalahan yang terjadi. Permasalahan tersebut dapat dibagi 4 kategori yaitu manusia(Man), mesin(Machine), materi(Material), dan metode(Method).

3.1.2. Analisis Persyaratan

Analisis persyaratan sistem dikelompokkan ke dalam dua kategori yaitu, analisis persyaratan fungsional dan analisis persyaratan non-fungsional. Persyaratan fungsional berisi persyaratan pokok dari suatu sistem dimana persyaratan tersebut wajib ada atau disediakan dalam sistem tersebut. Sedangkan persyaratan non-fungsional berupa persyaratan tambahan yang dapat menunjang kinerja dari persyaratan fungsional.

3.1.2.1. Persyaratan Fungsional

Persyaratan fungsional dari sistem yang akan dirancang adalah sebagai berikut. 1. Plaintext yang dienkripsi adalah data text berformat *.TXT

2. Citra digital yang digunakan untuk penyisipan pesan adalah file dengan format *.PNG

3. Kunci eksternal 64 bit atau 8 karakter 4. Hasil enkripsi akan berbentuk biner

5. Citra digital yang disisipkan disimpan dalam format *.PNG

Pengamanan Data

Manusia Metode

Materi Mesin

Keterbatasan Kemampuan

Proses komputasi rumit

Spesifikasi Komputer yang rendah Algoritma DES

Modified LSB

pesan yang dienkripsi dan disisipkan


(20)

3.1.2.2. Persyaratan Non-Fungsional

Adapun persyaratan non-fungsional pada sistem ini adalah sebagai berikut : 1. Performa

Sistem yang dibangun harus dapat menunjukkan hasil dari proses enkripsi dan penyisipan pesan menggunakan algoritma DES (Data Encryption Standard)

dan Modified LSB (Least Significant Bit).Dan pesan tersebut dapat diekstraksi kembali dari citra penampung.

2. Mudah dipelajari dan digunakan

Sistem dibangun sederhana agar mudah digunakan dan dipelajari oleh pengguna (user).

3. Hemat biaya

Perangkat lunak yang dibangun tidak memerlukan peralatan tambahan ataupun perangkat pendukung dalam proses eksekusinya.

4. Dokumentasi

Perangkat lunak yang akan dibangun mampu menyimpan citra digital disisipkan pesan dan dapat menyimpan pesan yang diekstraksi kembali.

5. Manajemen kualitas

Perangkat lunak yang akan dibangun harus memiliki kualitas yang baik yaitu proses enkripsi dan penyisipan pesan relatif cepat. Begitu juga saat proses ekstraksi pesan dan dekripsi

6. Kontrol

Perangkat lunak harus mampu memanajemen proses error yang terjadi pada saat penggunaan.

3.1.3. Analisis Proses

Dalam sistem ini digunakan dua algoritma untuk pengamana data teks, yaitu algoritma DES (Data Encryption Standard) dan Modified LSB (least Significant Bit). Algoritma DES digunakan untuk mengenkripsi dan mendekripsikan pesan sedangkan Modified LSB digunakan utunk menyisipkan dan megekstrasikan pesan dari cover image. Proses pertama yang harus dikerjakan oleh sistem ini adalah pembangkitan kunci internal. Pembangkitan kunci internal dapat dilakukan dengan memasukkan kunci


(21)

eksternal sebesar 64 bit atau 8 karakter. Dari kunci eksternal akan didapat 16 kunci internal yang berfungsi untuk mengenkripsi dan mendekripsikan pesan, dan masing-masing kunci internal sebesar 56 bit. Pesan yang telah diinputkan akan dienkripsi menggunakan kunci internal dan akan menghasilkan ciphertext dalam bentuk biner. Setelah enkripsi, ciphertext akan disisipkan pada citra asli berformat *.PNG.

Citra hasil penyisipan akan disimpan dalam bentuk citra stego yang berformat *.PNG, dan kemudian akan dikirim kepada penerima pesan. Untuk mengetahui pesan yang terlah disisipkan maka pesan yang sudah disisipkan harus diekstrasikan dan kemudian didekripsi untuk mendapat pesan teks yang utuh.

3.2. Perancangan Sistem

Perancangan sistem merupakan tahapan yang dilakukan setelah tahap analisis sistem. Adapun perancangan sistem yang dilakukan adalah perancangan flowchart, kemudian dilanjutkan dengan pembuatan diagram Unified Modeling Language (UML) dari sistem.

3.2.1. Perancangan Flowchart Aplikasi

Pada bagian ini akan dijelaskan langkah-langkah pembuatan aplikasi dalam flowchart

sistem kemudian akan dijabarkan dalam bagian-bagian flowchart algoritma.

Flowchart di dalam sistem diantaranya:

3.2.1.1 Flowchart Pembangkitan Kunci

Pada proses ini, untuk membangkitkan kunci internal, pengguna harus memasukkan kunci eksternal sebesar 64 bit atau 8 karakter yang kemudian diubah ke dalam bentuk biner. Setelah kunci tersebut dalam bentuk biner, maka kunci tersebut akan mengalamai permutasi atau pemindahan posisi bit-bit dengan menggunakan tabel 2.1. PC-1. Setelah mengalami permutasi kunci kini hanya sebesar 56 bit, kunci 56 bit ini akan dibagi dua menjadi C0D0. C0D0 akan mengalami pergeseran bit sebanyak 16 kali untuk menghasilkan C1D1,….C16D16. Setelah itu, C1D1,….C16D16 akan mengalami


(22)

permutasi kembali dengan tabel 2.3. PC-2. Dari hasil permutasi tersebut, kita akan mendapat 16 kunci internal yang masing-masing sebesar 56 bit.

Gambar 3.2. Flowchart Pembangkitan Kunci

3.2.1.2. Flowchart Enkripsi Algoritma DES (Data Encryption Standard)

Pada proses ini, plaintext akan dienkripsi sehingga menjadi ciphertext. Algoritma yang digunakan untuk mengenkripsi pesan adalah algoritma DES. Hal yang pertama yang harus dilakukan adalah membangkitkan kunci internal yang kemudian menginput plaintext. Plaintext yang sudah diinputkan akan diubah menjadi pesan

start

Kunci Eksternal (Biner) Input Kunci

Permutasi PC-1

C0 D0

Left Shift bit

C1D1,C2D2,....C16D16

Permutasi PC-2

K1,....K16


(23)

biner, dan kemudian mengalami permutasi dengan tabel 2.4 tabel IP. Dan kemudian pesan dibagi menjadi dua bagian L0R0. Dan kemudian bagian R0 akan ditambah jumlah bitnya dengan menggunakan tabel 2.5. tabel ekspansi. R0 akan di XOR kan dengan Kn (kunci internal) dan menghasilkan B1,….,B8. Setelah mendapatkan Bn, maka proses selanjutnya adalah mensubtitusikan Bn dengan tabel 2.6. tabel S-Box. Dan kemudian dilanjutkan dengan permutasi tabel 2.7. tabel P. Proses terakhir enkripsi ialah dengan melakukan permutasi terakhir pada R16L16 dengan menggukan tabel 2.8. tabel IP-1.

Gambar 3.3. Flowchart Enkripsi

3.2.1.3. Flowchart Penyisipan Modified LSB (Least Significant Bi)

Start

Input Plaintext

Ubah ke biner

Permutasi dengan IP

L0 R0

Ekspansi R0

dengan tabel E

E(Rn-1)

N=1

Kn XOR E(Rn-1)

B1,...,B8

Subtitusi B1...8

dengan S-Box

Sn

Permutasi Sn

dengan tabel P

F(Kn + (Rn-1))

R1= L0 + F

(Kn + (Rn-1))

R16 L16

R16L16 dipermutasikan

dengan IP-1

Ciphertext (Biner)


(24)

Hasil enkripsi pesan akan disisipkan pada citra digital yang mempunyai 24 bit kedalaman warna. Pada penyisipan pesan, metode yang digunakan adalah Modified LSB (Least Significant Bit). Pesan akan disisipkan pada salah satu warna dari warna RGB (Red, Green, Blue) yaitu warna biru (Blue), pesan akan disisipkan pada bit terendah yang ada pada warna biru (Blue).

Gambar 3.4. Flowchart Penyisipan Pesan

3.2.1.4 Flowchart Ekstrasi Pesan

start

Input Cover Image

Ambil Nilai Biru setiap

pixel

Ubah ke biner

nilai biner biru

Input Ciphertext Penyisipan dengan LSB

Stego Image


(25)

Untuk mengekstrasi pesan, maka pertama yang harus diinput adalah stego image atau citra yang telah disisipkan pesan. Setelah citra stego diinput maka sistem akan membaca nilai setiap pixel citra stego.

Gambar 3.5. Flowchart Ekstrasi Pesan

3.2.1.5. Flowchart Dekripsi DES (Data Encypstion Standard)

Untuk dekripsi pesan dengan algoritma DES (Data Encryption Standard), hampir sama dengan alur untuk mengenkripsi pesan. Proses dekripsi pesan DES merupakan kebalikan dari proses enkripsi pesan, dengan menggunakan kunci eksternal yang sama. Tetapi yang berbeda ialah blok masukkan proses, kalau pada proses enkripsi blok masukkan adalah L0R0 maka untuk dekripsi blok masukkan awal adalah R16L16.

Start

Input Stego Image

Ambil Nilai Biru setiap

pixel

Ubah ke biner

Ciphertext


(26)

Gambar 3.6. Flowchart Dekripsi Pesan Start

Input Ciphertext (Biner)

Ubah ke Ascii Permutasi

dengan IP

Ln Rn

Ekspansi Rn

dengan tabel E

E(Rn-1)

N=16

Kn XOR E(Rn-1)

B1,...,B8

Subtitusi B1...8

dengan S-Box Sn

Permutasi Sn

dengan tabel P

F(Kn + (Rn-1))

R1= L0 + F

(Kn + (Rn-1))

L0 R0

L0 R0

dipermutasikan dengan IP-1

Plaintext (Biner)

End Plaintext


(27)

3.2.2. Perancangan Unified Modeling Language (UML)

Model diagram UML yang digunakan pada penelitian ini antara lain Use-case diagram, Sequence diagram, dan Activity diagram.

3.2.2.1 Use Case Diagram

Use Case berfungsi untuk menggambarkan langkah-langkah yang dapat dikerjakan oleh pengguna (user). Use case juga berfungsi untuk melihat interaksi pengguna dan sistem.

Gambar 3.7. Use Case Diagram Sistem

Pada gambar 3.7, pengguna memiliki peran sebagai pengirim dan penerima pesan. Untuk melakukan enkripsi pesan, pengirim terlebih dahulu membangkitkan kunci internal dengan cara menginputkan kunci eksternal. Kunci internal digunakan untuk mengenkripsi pesan plaintext. Ciphertext sebagai hasil enkripsi akan disisipkan pada citra asli (cover image). Citra stego merupakan citra hasil dari penyisipan

ciphertext ke citra asli (cover image).

Actor

SYSTEM

Enkripsi Penyisipan Pesan

Ekstrasi Pesan Dekripsi Pesan

<<D epends

On>>

<<Extends>>

<<Extends>> <<Extends>>

<< Exten

ds>>

Pembangkitan kunci <<Depends On>>


(28)

Untuk melakukan dekripsi pesan, maka pengguna akan memerima pesan dalam bentuk citra untuk diekstrasi menjadi ciphertext. Kemudian ciphertext akan didekirpsikan menggunakan kunci eksternal yang sama.

Setiap use case diagram akan dijelaskan dengan dokumentasi naratif. Dokumentasi naratif pada proses pembangkitan kunci yang terdapat dalam use case

diagram dilihat pada Tabel 3.1

Tabel 3.1. Dokumentasi Naratif Use Case Bangkitkan kunci

Nama use case Pembangkitan Kunci

Aktor Pengguna

Deskripsi Use case berfungsi untuk membangkitkan kunci internal

Pre-condition -

Typical course of event

Aksi actor Respon sistem

Langkah 1: Pengguna

menginputkan kunci eksternal sebesar 64 bit atau 8 karakter

Langkah 2 : Pengguna

mengeksekusi tombol generate Langkah 3: Sistem

membangkitkan kunci Internal.

Langkah 4 : sistem

menampilkan kunci Internal

Alternate course - -

Post condition Kunci internal berhasil dibangkitkan.

Dokumentasi naratif proses enkripsi plaintext pada use case diagram dapat dilihat pada tabel 3.2


(29)

Tabel 3.2 Dokumentasi Naratif Use Case Enkripsi Nama use case Enkripsi

Aktor Pengguna

Deskripsi Use case mendekripsikan proses enkripsi plaintext.

Pre-condition Kunci internal telah dibangkitkan

Typical course of event

Aksi actor Respon sistem

Langkah 1: Menginput

plaintext dengan menekan

button Cari

Langkah 3: Melakukan proses enkripsi dengan menekan button Enkripsi

Langkah 2: Sistem membaca inputan

plaintext.

Langkah 4: Sistem mengenkripsi

plaintext dan menghasilkan

ciphertext

Langkah 5: Sistem menampilkan

ciphertext.

Alternate course - -

Post condition Diperoleh ciphertext hasil enkripsi.

Dokumentasi naratif pada proses penyisipan ciphertext yang terdapat dalam

use case diagram dilihat pada Tabel 3.3

Tabel 3.3 Dokumentasi Naratif Use Case Penyisipan Nama use case Penyisipan

Aktor Pengguna

Deskripsi Use case mendekripsikan proses penyisipan ciphertext.


(30)

Typical course of event

Aksi actor Respon sistem

Langkah 1 : Menginputkan citra asli

Langkah 3: Melakukan proses penyisipan dengan menekan button Penyisipan

Langkah 2: Sistem membaca nilai warna biru setiap pixel dan mengubahnya ke biner

Langkah 4: Sistem menyisipkan

ciphertext biner ke bit paling rendah pada warna biru.

Langkah 5: Sistem menyimpan citra stego.

Alternate course

Post condition Diperoleh citrastego yang telah disisipkan ciphertext.

Dokumentasi naratif pada proses ekstraksi ciphertext yang terdapat dalam use case diagram dilihat pada Tabel 3.4

Tabel 3.4 Dokumentasi Naratif Use Case Ekstraksi Nama use case Ekstraksi

Aktor Pengguna

Deskripsi Use case mendekripsikan proses ekstraksi ciphertext.

Pre-condition Citra stego telah disisipkan ciphertext.

Typical course of event

Aksi actor Respon sistem

Langkah 1 : Menginputkan

citra stego Langkah 2: Sistem membaca nilai warna biru citra stego.


(31)

Langkah 3: Melakukan proses ekstraksi dengan

menekan button Ekstraksi Langkah 4: Sistem mengekstraksi

ciphertext di bit paling rendah dari warna biru

Langkah 5: Sistem menampilkan

ciphertext

Alternate course - -

Post condition Diperoleh ciphertext yang akan didekripsi

Dokumentasi naratif pada proses dekripsi ciphertext yang terdapat dalam use case diagram dilihat pada Tabel 3.5

Tabel 3.5 Dokumentasi Naratif Use Case Dekripsi Nama use case Dekripsi

Aktor Pengguna

Deskripsi Use case mendekripsikan proses dekripsi ciphertext.

Pre-condition Ciphertext telah diekstraksi dari citra stego.

Typical course of event

Aksi actor Respon sistem

Langkah 1 : Menginputkan kunci eksternal yang sama dengan kunci eksternal enkripsi

Langkah 2: Sistem membangkitkan kunci internal


(32)

Langkah 5: Melakukan dekripsi dengan menekan

button Dekripsi.

Langkah 3 : sistem menampilkan kunci internal

Langkah 4 : sistem menampilkan

ciphertext

Langkah 6: Sistem mendekripsi

ciphertext menjadi plaintext.

Alternate course - -

Post condition Diperoleh plaintext hasil dekripsi

3.2.2.2. Sequence Diagram

Sequence diagram digunakan untuk menggambarkan skenario atau rangkaian

langkah-langkah yang dilakukan sebagai respons dari sebuah event untuk menghasilkan output

tertentu. Message digambarkan sebagai garis berpanah dari satu objek ke objek lainnya. Garis berpanah penuh menunjukan input yang dilakukan pengguna terhadap sistem, sedangkan garis putus-putus menunjukan output yang dihasilkan oleh sistem.

Activation bar menunjukkan periode waktu proses diilakukan, sebuah activation bar

dimiliki oleh setiap input dan output yang terjadi. Sequence diagram pada sistem ini terbagi dua: gambar 3.8 merupakan sequence diagram enkripsi dan penyisipan

plaintext, sedangkan gambar 3.9 merupakan sequence diagram ekstraksi dan dekripsi


(33)

Pembangkitan kunci Enkripsi Penyisipan

user

input eksternal key Tampilkan eksternal key Bangkitkan internal key

Tampilkan internal Key

input plaintext tampilkan plaintext

enkripsi plaintext tampilkan ciphertext

Import citra tampilkan citra penyisipan pesan tampilkan stego image

simpan stego image stego image.bmp


(34)

Pembangkitan kunci ekstrasi Dekripsi

user

input eksternal key Tampilkan eksternal key

Bangkitkan internal key

Tampilkan internal Key

import stego image tampilkan stego image

ektrasi ciphertext

tampilkan ciphertext

Dekripsi ciphertext

tampilkan plaintext


(35)

3.2.2.3. Activity Diagram

Activity diagram menggambarkan alir aktivitas dalam sistem yang dirancang,

bagaimana awal alir sistem, decision yang mungkin terjadi, dan bagaimana sistem berakhir. Nodes bulat berwarna hitam menunjukkan awal proses sedangkan nodes

bulat berwarna hitam ditengah menunjukkan akhir proses. Activity diagram pada sistem ini terbagi dua: gambar 3.10 merupakan activity diagram enkripsi dan penyisipan plaintext, sedangkan gambar 3.11 merupakan activity diagram ekstraksi dan dekripsi ciphertext.

Gambar 3.9. Activity diagram enkripsi dan penyisipan

pengguna sistem

input kunci tampilkan kunci

bangkitkan kunci internal tampilkan kunci internal

input plaintext tampilkan plaintext

enkripsi plaintext

tampilkan ciphertext import citra

tampilkan file citra sisipkan pesan

proses penyisipan pesan

tampilkan stego image simpan stego image

meyimpan stego image .png


(36)

Gambar 3.10. Activity diagram ekstraksi dan dekripsi

3.2.3. Perancangan User Interface

Adapun perancangan User Interface yang dilakukan yaitu perancangan form home, perancangan form enkripsi dan perancangan form dekripsi.

3.2.3.1 Perancangan Interface Form Home

Pada saat aplikasi dijalankan, form yang pertama kali dilihat oleh user adalah form home. Adapun rancangan interface form home dapat dilihat pada gambar 3.11.

pengguna sistem

input kunci tampilkan kunci

bangkitkan kunci internal tampilkan kunci internal

tampilkan plaintext dekripsi ciphertext tampilkan ciphertext

ekstrasi pesan proses ekstrasi pesan tampilkan stego image input stego image


(37)

Gambar 3.12. Tampilan Form Home

Keterangan:

1. Tab control yang berfungsi untuk menampilkan tab page home.

2. Tab control yang berfungsi untuk menampilkan tab page enkripsi.

3. Tab control yang berfungsi untuk menampilkan tab page dekripsi.

4. Label yang berisi judul skripsi penulis. 5. Label yang berisi nama penulis.

6. Label yang berisi logo.

3.2.3.2 Perancangan Interface Form Enkripsi

Pada form enkripsi, user dapat menginputkan kunci eksternal, plaintext yang akan di enkripsikan dan citra yang akan disisipkan setelah pesan selesai dienkripsi. Adapun rancangan interface form enkripsi dapat dillihat pada gambar 3.12


(38)

Keterangan

1. Button yang berfungsi untuk mengambil atau mencari file citra

2. Button yang berfungsi untuk mereset semua yang ada di form enkripsi

3. Picturebox yang berfungsi untuk menampilkan citra yang akan disisipkan

4. Textbox yang berfungsi untuk menampilkan ekternal key

5. Button yang berfungsi untuk membangkitkan kunci

6. Richtextbox yang berfungsi untuk menampilkan kunci internal

7. Button yang berfungsi untuk mencari atau mengambil file text 8. Richtextbox yang berfungsi menampilkan pesan atau plaintext

9. Button yang berfungsi mengenkripsi pesan atau plaintext

10. Richtextbox yang berfungsi untuk menampilkan ciphertext dalam bentuk biner 11. Button yang berfunsi untuk menyisipkan pesan cipher ke dalam citra

12. Picturebox yang berfungsi untuk menampilkan citra yang telah disispkan pesan

3.2.3.3 Perancangan Interface Form Dekripsi

Pada form dekripsi, user dapat menginputkan kunci eksternal, citra yang sudah disisipkan pesan,mengekstrasikan pesan dan mendekripsikan pesan. Adapun rancangan interface form enkripsi dapat dillihat pada gambar 3.13


(39)

Keterangan :

1. Textbox yang berfungsi untuk menampilkan ekternal key

2. Button yang berfungsi untuk membangkitkan kunci

3. Richtextbox yang berfungsi untuk menampilkan kunci internal

4. Button yang berfungsi untuk mencari citra

5. Picturebox yang berfungsi untuk menampilkan citra 6. Button yang berfungsi untuk mengambil pesan dari citra

7. Button yang berfungsi untuk mereset semua yang ada dalam form dekripsi

8. Richtextbox yang berfungsi untuk menampilkan cipher bit

9. Button yang berfungsi untuk mendekripsikan pesan bit 10. Richtextbox yang berfungsi untuk menampilkan plaintext


(40)

IMPLEMENTASI DAN PENGUJIAN

4.1 Implementasi Sistem

Setelah melakukan analisis dan perancangan sistem, tahap selanjutnya adalah implementasi. Sistem ini menggunakan dua bahasa pemrograman yaitu bahasa pemrograman Python dan bahasa pemrograman C# . Intergrated Development

Environment (IDE) yang digunakan adalah Wing IDE untuk bahasa pemrograman

python dan Microsoft Visual Studio Ultimate 2012 untuk C#.

Spesifikasi perangkat keras yang digunakan untuk pembangunan dan pengujian sistem ini adalah sebagai berikut:

Tabel 4.1 Spesifikasi Kebutuhan Perangkat Keras untuk Implementasi Spesifikasi Komputer

CPU : Intel Core i3 RAM : 6 Giga Byte Hard Disk : 600 Giga Byte Monitor : 14”

Sistem Operasi : Windows 7 Home Premium

4.1.1 Form Home

Form home adalah halaman awal yang akan pertama kali muncul ketika aplikasi dijalankan. Pada form ini terdapat tiga tab control, judul skripsi, logo universitas dan nama penulis. Form home dapat dilihat pada gambar 4.1


(41)

Gambar 4.1 Form Home

4.1.2 Form Enkripsi

Pada form enkripsi, user dapat menginputkan kunci eksternal, citra, dan plaintext. Pertama user harus menginputkan citra yang akan disisipkan pesan. Setelah citra berhasil diinputkan kemudian user harus menginputkan kunci eksternal untuk dibangkitkan. Setelah kunci internal didapat dari hasil pembangkitan kunci maka user dapat menginputkan plaintext. Plaintext akan dienkripsi dengan algoritma DES (Data Encryption Staqndard), maka akan dihasilkan pesan cipher dalam bentuk bit. Kemudian pesan yang berbentuk cipher bit tersebut akan disisipkan pada citra yang telah diinputkan tadi. Gambar 4.2 merupakan tampilan dari form enkripsi.


(42)

4.1.3 Form Dekripsi

Pada form dekripsi ini, user dapat mengektrasi pesan dari citra yang telah disisipkan pesan dan mendekripsikan pesan cipher bit menjadi plaintext atau pesan asli. Yang dapat dilakukan user pada form dekripsi adalah user harus menginputkan kunci eksternal yang sama dengan kunci eksternal pada proses enkripsi. Kemudian user menginputkan citra yang telah disisipkan pesan dan mengektrasikan pesan tersebut menjadi pesan cipher bit. Setelah pesan cipher bit didapat maka user dapat mendekripsikan pesan tersebut menjadi plaintext atau pesan yang asli. Pada gambar 4.3 adalah tamipilan form dekripsi.

Gambar 4.3 Form Dekripsi

4.2 Pengujian Sistem

Pengujian sistem akan membutuhkan file teks berformat *.txt dan pesan akan disisipkan pada citra berformat *.png. Pengujian sistem akan dilakukan pada tahanapan enkripsi pesan, penyisipan pesan, ekstrasi pesan dan dekripsi pesan.


(43)

4.2.1 Proses Pembangkitan Kunci Internal

Pada proses pembangkitan kunci internal, user harus menginputkan kunci eksternal sebesar 64 bit atau 8 karakter. Kunci eksternal akan menghasilkan 16 buah kunci internal dan masing-masing kunci internal memiliki ukuran yang sama yaitu 56 bit. Kunci eksternal yang akan digunakan adalah ”clairine”. Kunci eksternal harus diubah ke dalam bentuk biner. Berikut proses pembangkitan kunci internal.

Kunci eksternal : clairine

Ubah kunci eksternal kedalam benttuk biner

clairine = 01100011 01101100 01100001 01101001 01110010 01101001 01101110 01100101

a. Permutasi kunci

Untuk mendapat kunci K, maka kunci eksternal yang dalam bentuk biner harus mengalami permutasi dengan menggunakan tabel 2.1 permuted choice-1. Cara menggunakan tabel 2.1 permuted choice adalah dengan cara mengganti posisi bit. Misalkan kolom 1 baris 1 pada tabel 2.1 permuted choice-1 adalah 57, artinya bit ke 57 dari kunci eksternal akan menjadi bit pertama pada kunci K. Pada tahap ini bit yang kelipatan 8 tidak akan digunakan, seperti bit ke 8,16,24,32,40,48,56 dan 64. Kunci eksternal

01100011 01101100 01100001 01101001 01110010 01101001 01101110 01100101 K

00000000 11111111 11111111 00010101 00011100 00100110 10100000

b. Pembagian Kunci

Setelah mendapat kunci K sebesar 56 bit, maka kunci K akan dibagi dua untuk menghasilkan C0 dan D0

C0 = 0000 0000 1111 1111 1111 1111 0001 D0 = 0101 0001 1100 0010 0110 1010 0000

c. Pembuatan 16 Kunci Internal

Pada tahap ini C0 dan D0 masing-masing bit pertamanya akan digeser dengan menggunakan aturan tabel 2.2 jumlah pergeseran bit dengan 16 kali putaran.


(44)

Tabel 4.2 Hasil Pergeseran bit Putaran Jumlah pergeseran bit Cn Dn

0 0 0000000011111111111111110001

0101000111000010011010100000

1 1 0000000111111111111111100010

1010001110000100110101000000

2 1 0000001111111111111111000100

0100011100001001101010000001

3 2 0000111111111111111100010000

0001110000100110101000000101

4 2 0011111111111111110001000000

0111000010011010100000010100

5 2 1111111111111111000100000000

1100001001101010000001010001

6 2 1111111111111100010000000011

0000100110101000000101000111

7 2 1111111111110001000000001111

0010011010100000010100011100

8 2 1111111111000100000000111111

1001101010000001010001110000

9 1 1111111110001000000001111111

0011010100000010100011100001

10 2 1111111000100000000111111111

1101010000001010001110000100

11 2 1111100010000000011111111111

0101000000101000111000010011

12 2 1110001000000001111111111111

0100000010100011100001001101

13 2 1000100000000111111111111111

0000001010001110000100110101

14 2 0010000000011111111111111110


(45)

15 2 1000000001111111111111111000 0010100011100001001101010000

16 1 0000000011111111111111110001

0101000111000010011010100000

d. Permutasi Kunci Internal

Pada tahap ini Cn dan Dn akan digabungkan dan akan dipermutasikan kembali menggunakan tabel 2.3 Permuted choice-2 dan akan menghasilkan 16 kunci K+ atau kunci internal.

Tabel 4.3 Kunci K+ atau Kunci Internal 16 Kunci K+n

K+1 = '111000001011111001101110001100000101000000111110', K+2 = '111000001011011011110110100010100100110110000100', K+3 = '111101001101011001110110000010000110001110010001', K+4 = '111001101101001101110010111100110100000000000001', K+5 = '101011101101001101110111110000100000001100001010', K+6 = '101011110101001101011011100101000011001100001100', K+7 = '001011110101001111111001011100000001001011100000', K+8 = '100111110101100111011001010100001010100000101011', K+9 = '000111110100100111011011001000001100010110001101', K+10 = '001111110110100110011101100010100001010010000011', K+11 = '000111110010110110001101110011100100001100100001', K+12 = '010110110010110010111101000100100100101101001000', K+13 = '110111011010110010101100110100001001000100010000', K+14 = '110100101010111010101110110000010010011000101000', K+15 = '111110001011111000100110011110000011101000001000', K+16 = '111100011011111000100110000110101000010000100101'


(46)

4.2.2 Proses Enkripsi

Pada proses enkrispi, user harus menginputkan plaintext atau pesan. Pesan yang telah diinputkan akan diubah kedalam bentuk pesan biner M, dan proses enkripsi akan diulang sebanyak 16 kali sehingga akan didapat R16L16 yang akan menjadi cipher bit. Plaintext = toshibao

M = 01110100 01101111 01110011 01101000 01101001 01100010 01100001 01101111

Sebelum pesan M dienkripsi, pesan M akan dipermutasikan menggunakan tabel 2.4 initial permutation. Cara menggunakan tabel 2.4 initial permtation yaitu dengan cara mengganti posisi bit pada pesan M. Misalkan kolom 1 baris 1 pada tabel 2.4 initial permutation adalah 58, artinya bit ke 58 pada pesan M akan menjadi bit pertama pada pesan IP.

IP = 11111111 00000101 10000011 11010110 00000000 11111111 10011010 10100110

Pesan IP kemudian akan dibagi dua menjadi L0 = 11111111 00000101 10000011 11010110 R0 = 00000000 11111111 10011010 10100110

Lakukan proses iterasi sebanyak 16 kali dengan :

Ln = Rn – 1

Rn = Ln – 1 + f(Rn-1, K+n)

Diman n = 1. Untuk fungsi f , fungsi f akan dihasilkan dari proses perhitungan 2 blok bit yaitu Rn-1 dan K+n.

Untuk proses enkripsi selanjutnya, blok Rn-1 akan diubah dari 32 bit menjadi 48 bit dengan menggunkan tabel 2.5 Tabel ekspansi dimana n=1, cara menggunakan tabel ekspansi adalah dengan mengganti posisi bit dan akan mengulangi beberapa bagian bit.

R0 = 00000000 11111111 10011010 10100110


(47)

Selanjutnya E(R0) akan di XOR kan dengan K+1.

K+1 = 11100000 10111110 01101110 00110000 01010000 00111110 E(R0) = 00000000 00010111 11111111 11001111 01010101 00001100

f(K+1,E(R0)) = 111000 001010 100110 010001 111111 110000 010100 110010

Setelah mendapat f , selanjutnya f akan dibagi 8 blok bit masing-masing blok bit berisi 6 bit. Dimana setiap blok bit akan disubtitusikan dengan tabel 2.6 Tabel Substitution Box DES menurut urutan blok bit, misalkan blok bit pertama akan disubstitusikan dengan S1 dan seterusnya sampai blok ke 8.

f = S1(111000) S2(001010) S3(100110) S4(010001) S5(111111) S6(110000)

S7(010100) S8(110010)

Cara menggunakan tabel 2.6 Tabel Substitution Box DES adalah bit pertama dan bit terakhir pada blok bit akan digabungkan dan akan menjadi penunjuk baris sedangkan bit yang berada pada tengah blok akan menjadi penunjuk posisi kolom.

S1(111000) bit pertama = 1, bit terakhir = 0, bit tengah = 1100. Jadi baris 10 diubah ke desimal menjadi baris 2, kolom 1100 diubah ke desimal menjadi kolom 12. Nilai yang ada pada baris 2 kolom 12 adalah 3 jika dibinerkan adalah 0011.

S2(001010) bit pertama = , bit terakhir = 0, bit tengah = 0101. Jadi baris 00 diubah ke desimal menjadi baris 0, kolom 0101 diubah ke desimal menjadi kolom 5. Nilai yang ada pada baris 0 kolom 5 adalah 11 jika dibinerkan adalah 1011.

S3(100110) bit pertama = 1, bit terakhir = 0, bit tengah = 0011. Jadi baris 10 diubah ke desimal menjadi baris 2, kolom 0011 diubah ke desimal menjadi kolom 3. Nilai yang ada pada baris 2 kolom 3 adalah 9 jika dibinerkan adalah 1001.

S4(010001) bit pertama = 0, bit terakhir = 1, bit tengah = 1000. Jadi baris 01 diubah ke desimal menjadi baris 1, kolom 1000 diubah ke desimal menjadi kolom 8. Nilai yang ada pada baris 1 kolom 8 adalah 4 jika dibinerkan adalah 0100.

S5(111111) bit pertama = 1, bit terakhir = 1, bit tengah = 1111. Jadi baris 11 diubah ke desimal menjadi baris 3, kolom 1111 diubah ke desimal menjadi kolom 15. Nilai yang ada pada baris 3 kolom 15 adalah 3 jika dibinerkan adalah 0011.


(48)

S6(110000) bit pertama = 1, bit terakhir = 0, bit tengah = 1000. Jadi baris 10 diubah ke desimal menjadi baris 2, kolom 1000 diubah ke desimal menjadi kolom 8. Nilai yang ada pada baris 2 kolom 8 adalah 7 jika dibinerkan adalah 0111.

S7(010100) bit pertama = 0, bit terakhir = 0, bit tengah = 1010. Jadi baris 00 diubah ke desimal menjadi baris 0, kolom 1010 diubah ke desimal menjadi kolom 10. Nilai yang ada pada baris 0 kolom 10 adalah 9 jika dibinerkan adalah 1001.

S8(110010) bit pertama = 1, bit terakhir = 0, bit tengah = 1001. Jadi baris 10 diubah ke desimal menjadi baris 2, kolom 1001 diubah ke desimal menjadi kolom 9. Nilai yang ada pada baris 2 kolom 9 adalah 6 jika dibinerkan adalah 0110.

Nilai f setelah disubtitusikan dengan tabel 2.6 tabel Substitution Box DES adalah

f = 0011 1011 1001 0100 0011 0111 1001 0110

Setelah mendapat nilai f, maka f akan dipermutasikan dengan tabel 2.7 Tabel Permutasi. Cara penggunaan tabel 2.7 tabel permutasi adalah mengganti posisi bit f, misalkan pada kolom 1 baris 1 menunjukkan 16, maka bit ke 16 dari f akan menjadi bit pertama setelah dipermutasikan.

f = 0110 0110 0010 1010 0111 0011 1010 1011

Setelah mendapat nilai f , maka nilai R1 akan didapat. Sehingga

R1 = L0 + f (R0 , K1 )

R1 = 1111 1111 0000 0101 1000 0011 1101 0110 + 0110 0110 0010 1010 0111 0011

1010 1011

R1 = 1001 1001 0010 1111 1111 0000 0111 1101

Dari proses enkripsi ini akan didapat nilai R1L1, dimana nilai L1 sama dengan nilai R0.

R1 = 1001 1001 0010 1111 1111 0000 0111 1101


(49)

Proses enkripsi DES akan terus berulang sebanyak 16 kali dengan menggunkan 16 kunci internal dimana nilai n akan dimulai dari 1 (n = 1). Berikut adalah hasil dari proses enkripsi yang akan ditunjukkan pada tabel 4.4 Hasil Proses Iterasi Enkripsi.

Tabel 4.4 Hasil Proses Iterasi Enkripsi

n Rn Ln

0 00000000111111111001101010100110 11111111000001011000001111010110 1 10011001001011111111000001111101 00000000111111111001101010100110 2 00011101100010001001010001100011 10011001001011111111000001111101 3 11010010010011010100111101101110 00011101100010001001010001100011 4 01100000000001000100000110010010 11010010010011010100111101101110 5 11010010001010100111100110111010 01100000000001000100000110010010 6 11000001011010111110110110001100 11010010001010100111100110111010 7 01110001000100011100001101100110 11000001011010111110110110001100 8 10100001000001010110010100100101 01110001000100011100001101100110 9 00000111101000011111010001011101 10100001000001010110010100100101 10 00100100011000101101101011101111 00000111101000011111010001011101 11 01001110000100110011100111010000 00100100011000101101101011101111 12 00111001100100101001001110100010 01001110000100110011100111010000 13 00101111111100011100011001010111 00111001100100101001001110100010 14 01001101001001101111000000010011 00101111111100011100011001010111 15 10101101010110111110000011000001 01001101001001101111000000010011 16 00111111101101100000111110010010 10101101010110111110000011000001

Langkah selanjutnya adalah menggabungkan bit-bit R16 dan L16 menjadi satu.

R16 L16 = 00111111 10110110 00001111 10010010 10101101 01011011 11100000 11000001

Langkah terakhir dari proses enkripsi adalah R16L16 akan mengalami permutasi kembali dengan menggunakan tabel 2.8 tabel Initial Permutation -1.

R16 L16 = 00111111 10110110 00001111 10010010 10101101 01011011 11100000 11000001


(50)

C = 11100110 01110101 11010100 11100100 01110001 11011000 00101010 10011011

Jadi C adalah hasil dari proses enkripsi pesan dalam bentuk biner dengan menggunakan algoritma DES (Data Encryption Standard).

4.2.3 Proses Deskripsi

Untuk proses dekripsi pesan, inputannya adalah kebalikan dari input proses enkripsi pesan. Dimana input awalnya adalah pesan C. Untuk langah awal proses dekripsinya pesan C juga akan dibagi dua tetapi untuk blok awalannya adalah R16 dan L16. Dan untuk kunci dekripsinya juga adalah kunci ekternal yang sama dengan kunci eksternal untuk proses enkripsi. Pada proses dekripsi nilai n sama dengan 16 (n = 16). Jadi kunci internal yang digunakan juga akan dimulai dari K+16. Semua langkah-langkah proses dekripsi pesan sama dengan langkah-langkah proses enkripsi.

C = 11100110 01110101 11010100 11100100 01110001 11011000 00101010 10011011

Permutasikan pesan C menggunakan tabel 2.4 tabel Initial Permutation.

C = 11100110 01110101 11010100 11100100 01110001 11011000 00101010 10011011

IP = 00111111 10110110 00001111 10010010 10101101 01011011 11100000 11000001

Pesan IP akan dibagi dua masing- masing berukuran 32 bit

L0 = 00111111 10110110 00001111 10010010

R0 = 10101101 01011011 11100000 11000001

c. Iterasi


(51)

Ln = Rn – 1

Rn = Ln – 1 + f(Rn-1, K+n)

Diman n = 1. Untuk fungsi f , fungsi f akan dihasilkan dari proses perhitungan 2 blok bit yaitu Rn-1 dan K+n melalui 4 tahapan proses yaitu :

Proses ekspansi akan menggunakan tabel 2.5 tabel ekspansi. R0 = 10101101 01011011 11100000 11000001

E(R0) = 11010101 10101010 11110111 11110000 00010110 00000011

XOR Bit

K+16 = '111100011011111000100110000110101000010000100101'

E(R0) = 11010101 10101010 11110111 11110000 00010110 00000011

f(K+16,E(R0)) = 00100100 00010100 11010001 11101010 10010010 00100110

Setelah mendapat f , selanjutnya f akan dibagi 8 blok bit masing-masing blok bit berisi 6 bit. Dimana setiap blok bit akan disubtitusikan dengan tabel 2.6 Tabel Substitution Box DES menurut urutan blok bit, misalkan blok bit pertama akan disubstitusikan dengan S1 dan seterusnya sampai blok ke 8.

f = S1(001001) S2(000001) S3(010011) S4(010001) S5(111010) S6(101001) S7(001000) S8(100110)

Setelah disubtitusikan maka nilai f adalah

f = 1110 0011 1000 0100 0011 1001 1111 0001

1. Proses Permutasi

Setelah mendapat nilai f, maka f akan dipermutasikan dengan tabel 2.7 Tabel Permutasi. Maka nilai f setelah dipermutasikan adalah

f = 0111 0010 1001 0000 1111 1111 1000 0001

Setelah mendapat nilai f , maka nilai R16 akan didapat. Sehingga


(52)

R16 = 10101101 01011011 11100000 11000001 + 01110010 1001000011111111 10000001

R16 = 01001101 00100110 11110000 00010011

Dari proses iterasi dekripsi ini maka didapat nilai R16 dan L16

R16 = 01001101 00100110 11110000 00010011

L16 = 10101101 01011011 11100000 11000001

Berikut adalah hasil dari proses iterasi dekripsi yang akan ditunjukkan pada tabel 4.5 Hasil Proses Iterasi Dekripsi.

Tabel 4.5 Hasil Iterasi Dekripsi

n Rn Ln

16 01001101001001101111000000010011 10101101010110111110000011000001 15 00101111111100011100011001010111 01001101001001101111000000010011 14 00111001100100101001001110100010 00101111111100011100011001010111 13 01001110000100110011100111010000 00111001100100101001001110100010 12 00100100011000101101101011101111 01001110000100110011100111010000 11 00000111101000011111010001011101 00100100011000101101101011101111 10 10100001000001010110010100100101 00000111101000011111010001011101 9 01110001000100011100001101100110 10100001000001010110010100100101 8 11000001011010111110110110001100 01110001000100011100001101100110 7 11010010001010100111100110111010 11000001011010111110110110001100 6 01100000000001000100000110010010 11010010001010100111100110111010 5 11010010010011010100111101101110 01100000000001000100000110010010 4 00011101100010001001010001100011 11010010010011010100111101101110 3 10011001001011111111000001111101 00011101100010001001010001100011 2 00000000111111111001101010100110 10011001001011111111000001111101 1 11111111000001011000001111010110 00000000111111111001101010100110


(53)

Langkah selanjutnya adalah menggabungkan bit-bit R1 dan L1 menjadi satu.

R1L1 = 11111111 00000101 10000011 11010110 00000000 11111111 10011010 10100110

Langkah terakhir dari proses enkripsi adalah R1L1 akan mengalami permutasi kembali dengan menggunakan tabel 2.8 tabel Initial Permutation -1.

R1L1 = 11111111 00000101 10000011 11010110 00000000 11111111 10011010 10100110

M = 01110100 01101111 01110011 01101000 01101001 01100010 01100001 01101111

Jadi M adalah hasil dari proses Dekripsi pesan dalam bentuk biner dengan menggunakan algoritma DES (Data Encryption Standard). Dan menghasilkan

plaintext= ”toshibao”

4.2.4 Proses Penyisipan

Pada proses penyisipan pesan, pesan akan disisipkan pada salah satu warna dari citra digital yang telah diinput. Warna yang disisipkan pesan adalah warna biru (blue). Pesan akan disisipkan pada bit terendah dari warna biru. Misalkan kita mempunyai nilai 3 buah pixel dengan format RGB yang telah dirubah ke bentuk biner untuk meyisipkan pesan “010” pada salah satu warna RGB dalam hal ini warna yang akan disisipkan pesan adalah warna Biru (Blue)

ͳͲͲͳͲͳͲͳ ͲͲͲͲͳͳͲͳ ͳͳͲͲͳͲͲͳ ͳͲͲͳͲͳͳͲ ͲͲͲͲͳͳͳͳ ͳͳͲͲͳͲͳͳ ͳͲͲͳͳͳͳͳ ͲͲͲͳͲͲͲͲ ͳͳͲͲͳͲͳͳ

Bit yang disisipkan pesan adalah bit terendah dari warna biru(Blue) yaitu posisi matriks (1,3), (2,3), (3,3) dan menghsailkan perubahan

ͳͲͲͳͲͳͲͳ ͲͲͲͲͳͳͲͳ ͳͳͲͲͳͲͲ૙ ͳͲͲͳͲͳͳͲ ͲͲͲͲͳͳͳͳ ͳͳͲͲͳͲͳ૚ ͳͲͲͳͳͳͳͳ ͲͲͲͳͲͲͲͲ ͳͳͲͲͳͲͳ૙


(54)

Dikarenakan bit yang mengalami perubahan hanya satu warna yaitu warna biru(Blue) maka dibutuhkan cover image yang mempunyai ukuran yang besar dan pesan yang disisipkan akan terbatas.

4.3 Hasil Pengujian

4.3.1 Pengujian Enkripsi Plaintext dan Dekripsi Ciphertext

Setelah mendapat kunci internal, kemudian pesan harus diinputkan untuk dilakukan proses enkripsi. Pesan yang akan digunakan adalah file berformat *.txt. Panjang pesan tidak ditentukan. Berikut beberapa pesan yang akan dienkrispi dapat dilihat pada tabel 4.6.

Tabel 4.6 Hasil Enkripsi Pesan

Kunci Plaintext (*.txt)

Cipher bit Waktu Enkripsi (ms) Kunci 1 =

clairine hengky prayson fangaro gulo 110010011011100101001101110100 010011001001010001001110101101 100111010001011010000011010100 000110010110010111011001011001 010000000111111010010001101110 001101011111011000100001101100 010110100100011111110010100111 100100110111101111001001010111 0010110100010000 92

Kunci 2 = bk4739ua 1234567890 !@#$%^&* () abcdefghij 111111001110111100100010101100 011100001110011100100101110111 000010001011110110011011111110 111011100101001010100011001000 001000001010110111001010001001 010111100001000110001110010111 001110001000010000010100010111 111001001001000000100010111110 110


(55)

0100010000110100 Kunci 3 =

ilkom010

knowledge cannot replace friendship, i'd rather be an idiot than lose you

111110100111001000011110000100 001110101100001101111110010110 100010110111000011000110110111 001101001011001100101100010011 100001110100101011110001111101 010111011001101011010000111111 000100010011000110111010111111 101000110111001111011100001011 100001000101001001101101010101 111000110000000000011100101011 111000100111111011111110011011 011011010100100101111100100110 010111100010100100110010011001 101101101101110101000000111010 010010000101010010110010100001 001100110110000011110100111001 110110000110111100111001101110 110101001001011000110111000100 010100101000010100100010111001 110110010100011010101000010011 001101011111110011001101011111 1011010111

117

Untuk proses pendekripsian pesan, cipher bit yang telah didapat akan didekripsikan dengan kunci yang sama pada saat proses enkripsi pesan. Tabel 4.7 akan menunjukkan hasil dekripsi cipher bit.


(56)

Tabel 4.7 Hasil Dekripsi Pesan

Kunci Cipher Bit Plaintext Waktu

Dekripsi Pesan (ms) Kunci 1 =

clairine 110010011011100101001101110100 010011001001010001001110101101 100111010001011010000011010100 000110010110010111011001011001 010000000111111010010001101110 001101011111011000100001101100 010110100100011111110010100111 100100110111101111001001010111 0010110100010000 hengky prayson fangaro gulo 365

Kunci 2 = bk4739ua 111111001110111100100010101100 011100001110011100100101110111 000010001011110110011011111110 111011100101001010100011001000 001000001010110111001010001001 010111100001000110001110010111 001110001000010000010100010111 111001001001000000100010111110 0100010000110100 1234567890 !@#$%^&*() abcdefghij 518

Kunci 3 = ilkom010 111110100111001000011110000100 001110101100001101111110010110 100010110111000011000110110111 001101001011001100101100010011 100001110100101011110001111101 010111011001101011010000111111 000100010011000110111010111111 101000110111001111011100001011 100001000101001001101101010101 knowledge cannot replace friendship, i'd rather be an idiot than lose you


(57)

111000110000000000011100101011 111000100111111011111110011011 011011010100100101111100100110 010111100010100100110010011001 101101101101110101000000111010 010010000101010010110010100001 001100110110000011110100111001 110110000110111100111001101110 110101001001011000110111000100 010100101000010100100010111001 110110010100011010101000010011 001101011111110011001101011111 1011010111

4.3.2 Perbandingan waktu Enkripsi dan Dekripsi

Pada pengujian ini, akan dilakukan terhadap waktu proses enkripsi dan proses dekripsi dengan jumlah panjang karakter pesan.

Tabel 4.8 Perbandingan Waktu Enkripsi dan Dekripsi

Panjang Plaintext (karakter)

Panjang cipher bit

Waktu enkripsi (ms) Waktu Dekripsi (ms)

27 236 92 365

32 256 110 518

80 640 117 902

Berdasarkan tabel 4.8 dapat dilihat grafik yang terdapat pada gambar 4.4 yaitu lama waktu yang dibutuhkan untuk melakukan proses enkripsi dan proses dekripsi.


(58)

Gambar 4.4 Grafik Perbandingan Waktu Enkripsi dan Dekripsi

Dari beberapa pengujian terhadap dekripsi pesan, untuk mendekripsikan pesan dibutuhkan waktu yang sedikit lama dibandingkan dengan proses enkripsi pesan.

4.3.3 Pengujian Penyisipan dan Ekstrasi Pesan

Setelah proses enkripsi pesan selesai, maka cipher bit akan disisipkan pada citra yang telah diinputkan dan berformat *.png. Cipher bit akan disisipkan pada salah warna dari setiap pixel, yaitu warna biru (blue). Cipher bit disisipkan pada bit terendah dari warna biru. Berikut cover image yang akan disisipkan pesan dan dapat dilihat pada tabel 4.9.

0 100 200 300 400 500 600 700 800 900 1000

27 karakter 32 karakter 80 karakter

w

a

k

tu

(

m

s)

panjang pesan (karakter)

enkripsi dekripsi


(59)

Tabel 4.9 Penyisipan Pesan

Pesan Citra asli Citra stego Waktu

Penyisipan (ms) hengky

prayson fangaro gulo

Nama file : tes.png Dimensions : 622 x 579 Ukuran : 332 kb

Nama file : PaddedImage.png Dimensions : 622 x 579 Ukuran : 364 kb

1546

1234567890 !@#$%^&*( ) abcdefghij

Nama File : Coba.png Dimensions : 870 x 660 Ukuran : 406 kb

Nama file :

PaddedImage2.png Dimensions : 870 x 660 Ukuran : 464 kb

2473

knowledge cannot replace friendship, i'd rather be an idiot than lose you


(60)

Nama file :

FASILKOMTI.png Dimensions : 1063 x 1063 Ukuran : 524 kb

Nama file :

PaddedImage3.png

Dimensions : 1063 x 1063 Ukuran : 543 kb

Dari beberapa pengujian dapat dilihat bahwa jumlah karakter pada setiap pesan akan mempengaruhi waktu untuk mengenkrispi suatu pesan. Sedangkan untuk citra asli dan citra stego yang telah disisipkan cipher bit terlihat tidak ada perbedaan secara kasat mata, dimensi citra sebelum dan setelah disisipkan pesan juga tidak berubah walaupun ukuran citra sebelum dan setelah disisipkan pesan sedikit berbeda namun tidak telalu jauh perbedaan ukuran citranya. Dan semakin banyak jumlah pesan yang disisipkan maka semakin lama juga waktu penyisipan pesan. Sedangkan untuk proses ekstrasi pesan dilakukan sebelum proses dekripsi pesan dilakukan. Lama waktu ekstrasi juga dapat dipengaruhi oleh panjang cipher bit yang telah disisipkan pada citra asli.

Tabel 4.10 Proses Ekstrasi Pesan

Citra Stego Cipher Bit Waktu

Ekstrasi (ms)

Nama file : PaddedImage.png Dimensions : 622 x 579 Ukuran : 364 kb

1100100110111001010011011101000 1001100100101000100111010110110 0111010001011010000011010100000 1100101100101110110010110010100 0000011111101001000110111000110 1011111011000100001101100010110 1001000111111100101001111001001 1011110111100100101011100101101 00010000


(61)

Nama file : PaddedImage2.png Dimensions : 870 x 660

Ukuran : 464 kb

1111110011101111001000101011000 1110000111001110010010111011100 0010001011110110011011111110111 0111001010010101000110010000010 0000101011011100101000100101011 1100001000110001110010111001110 0010000100000101000101111110010 0100100000010001011111001000100 00110100

524

Nama file :PaddedImage3.png Dimensions : 1063 x 1063 Ukuran : 543 kb

1111101001110010000111100001000 0111010110000110111111001011010 0010110111000011000110110111001 1010010110011001011000100111000 0111010010101111000111110101011 1011001101011010000111111000100 0100110001101110101111111010001 1011100111101110000101110000100 0101001001101101010101111000110 0000000000111001010111110001001 1111101111111001101101101101010 0100101111100100110010111100010 1001001100100110011011011011011 1010100000011101001001000010101 0010110010100001001100110110000 0111101001110011101100001101111 0011100110111011010100100101100 0110111000100010100101000010100 1000101110011101100101000110101 0100001001100110101111111001100 11010111111011010111


(62)

Pada proses ekstrasi pesan, waktu yang dibutuhkan untuk ekstrasi pesan hanya sedikit dibandingkan dengan proses penyisipan pesan yang membutuhkan waktu sedikit lama. Kemudian Pada gambar 4.5 akan menunjukkan grafik lama waktu penyisipan pesan dan ekstrasi pesan.

Gambar 4.5 Grafik Perbandingan Waktu Penyisipan dan Ekstrasi

Pada gambar 4.5 menunjukkan bahwa waktu yang dibutuhkan untuk proses penyisipan pesan lebih lama dibandingkan dengan proses ekstrasi pesan dikarenakan bit-bit pada proses penyisipan mengalami perubahan sehingga citra kembali disusun menjadi satu citra baru.

0 1000 2000 3000 4000 5000

236 256 640

w

a

k

tu

(

m

s)

panjang cipher bit

ekstrasi penyisipan


(1)

vii

IMPLEMENTATION OF MODIFIED LSB(LEAST SIGNIFICANT BIT) AND DES (DATA ENCRYPTIONSTANDARD) ALGORITHM

ON TEXT DATA SECURITY

ABSTRACT

The development of computer technology can make progress in the exchange of data or information. The exchange of data or information at this time is very fast, so everyone needs data or information. Data security becomes very important, so frequent misuse of data and the security of third-party interference. To resolve the issue of data security is needed, namely with cryptography and steganography techniques. In this study, the cryptographic algorithm used is the DES algorithm (Data Encryption Standard) and combined with Modified LSB (Least Significant Bit). In the DES algorithm with a key length required 64 bits to encrypt and decrypt a message, the message / plaintext first be converted into a binary form that is then encrypted with the DES algorithm. Following shaped cipher message bits will be inserted in the image format * .png. The image that has been inserted messages will be extracted so that the cipher bits will be obtained. To obtain the plaintext bit cipher will didekripsikan with the DES algorithm and the same 64-bit key with the encryption key.

Key Word : Cryptography, DES Algorithm, , Steganography, LSB(Least Significant Bit). Cipher Block


(2)

DAFTAR ISI

PERSETUJUAN ii

PERNYATAAN iii

PENGHARGAAN iv

ABSTRAK vi

ABSTRACT vii

DAFTAR ISI viii

DAFTAR TABEL x

DAFTAR GAMBAR xi

DAFTAR LAMPIRAN xii

BAB I PENDAHULUAN

1.1 Latar Belakang Masalah 1

1.2 Rumusan Masalah 2

1.3 Batasan Masalah 2

1.4 Tujuan Penelitian 3

1.5 Manfaat Penelitian 3

1.6 Metode Penelitian 3

BAB II TINJAUAN PUSTAKA

2.1 Kriptografi 5

2.1.1 Kriptografi Simetri 6

2.1.2 Kriptografi Asimetri 7

2.2 DES (Data Encryption Standard) 7

2.2.1 Pembangkitan Kunci 8

2.2.2 Enkripsi Algoritma DES 11

2.2.3 Dekripsi Algoritma DES 15

2.3 Citra Digital 15

2.3.1 Citra Bitmap 16

2.3.2 Citra PNG 16

2.4 Steganografi 17

2.4.1 LSB(Least Significant Bit) 18

BAB III ANALISIS DAN PERANCANGAN SISTEM

3.1 Analisis Sistem 20

3.1.1 Analisis Masalah 20

3.1.2 Analisis Persyaratan 21

3.1.2.1 Persyaratan Fungsional 21

3.1.2.2 Persyaratan Non-Fungsional 21

3.1.3 Analisis Proses 22

3.2 Perancangan Sistem 23

3.2.1 Perancangan Flowchart Aplikasi 23


(3)

ix

3.2.1.2 Flowchart Enkripsi Algoritma DES 24 3.2.1.3 Flowchart Penyisipan Modified LSB 26 3.2.1.4 Flowchart Ektraksi Pesan 27 3.2.1.5 Flowchart Dekripsi DES 27 3.2.2 Perancangan Unified Modeling Languange (UML) 29

3.2.2.1 Use Case Diagram 29

3.2.2.2 Sequence Diagram 34

3.2.2.3 Activity Diagram 37

3.2.3 Rancangan Interface Aplikasi 38

3.2.3.1 Rancangan Interface Form Home 38 3.2.3.2 Rancangan Interface Form Enkripsi 39 3.2.3.3 Rancangan Interface Form Dekripsi 40

BAB IV IMPLEMENTASI DAN PENGUJIAN SISTEM

4.1 Implementasi Sistem 42

4.1.1 Form Home 42

4.1.2 Form Enkripsi 43

4.1.3 Form Dekripsi 44

4.2 Pengujian Sistem 44

4.2.1 Proses Pembangkitan Kunci Internal 45

4.2.2 Proses Enkripsi 48

4.2.3 Proses Dekripsi 52

4.2.4 Proses Penyisipan 55

4.3 Hasil Pengujian 56

4.3.1 Pengujian Enkripsi Plaintext dan Dekripsi Cphertext 56 4.3.2 Perbandingan Waktu Enkripsi dan Dekripsi 59 4.3.3 Pengujian Penyisipan dan Ekstrasi Pesan 60

BAB V KESIMPULAN DAN SARAN

5.1 Kesimpulan 65

5.2 Saran 67


(4)

DAFTAR TABEL

Tabel 2.1 Permuted Choice-1 8

Tabel 2.2 Jumlah Pergeseran Bit 9

Tabel 2.3 Permuted Choice-2 9

Tabel 2.4 Initial Permutation 11

Tabel 2.5 Tabel Ekspansi 12

Tabel 2.6 Tabel Substition Box 13

Tabel 2.7 Tabel Permutasi P 15

Tabel 2.8 Initial Permutation -1 15

Tabel 3.1 Dokumentasi Naratif Use Case Bangkitkan Kunci 30

Tabel 3.2 Dokumentasi Naratif Use Case enkripsi 31

Tabel 3.3 Dokumentasi Naratif Use Case Penyisispan 31

Tabel 3.4 Dokumentasi Naratif Use Case Ekstrasi 32

Tabel 3.5 Dokumentasi Naratif Use Case Dekripsi 33

Tabel 4.1 Spesifikasi kebutuhan perangkat keras untuk implementasi 42

Tabel 4.2 Hasil Pergeseran Bit 46

Tabel 4.3 Kunci K+ atau Kunci Internal 47

Tabel 4.4 Hasil Proses Iterasi Enkripsi 51

Tabel 4.5 Hasil Proses Iterasi Dekripsi 54

Tabel 4.6 Hasil Enkripsi Pesan 56

Tabel 4.7 Hasil Dekripsi Pesan 58

Tabel 4.8 Perbandingan Waktu Enkripsi dan Dekripsi 59

Tabel 4.9 Penyisipan Pesan 61


(5)

xi

DAFTAR GAMBAR

Gambar 2.1 Kriptogafi Simetri 6

Gambar 3.1 Diagram Ishikawa 21

Gambar 3.2 Flowchart Pembangkitan Kunci 24

Gambar 3.3 Flowchart Enkripsi 25

Gambar 3.4 Flowchart Penyisipan Pesan 26

Gambar 3.5 Flowchart Ekstrasi 27

Gambar 3.6 Flowchart Dekripsi Pesan 28

Gambar 3.7 Use Case Diagram Sistem 29

Gambar 3.8 Sequence Diagram enkripsi dan Penyisipan 35 Gambar 3.9 Sequence diagram Dekripsi dan Ekstrasi 36 Gambar 3.10 Activity Diagram Enkripsi dan Penyisipan 37 Gambar 3.11 Activity Diagram Ekstrasi dan Dekripsi 38

Gambar 3.12 Tampilan Form Home 39

Gambar 3.13 Tampilan Form Enkripsi 39

Gambar 3.14 Tampilan Form Dekripsi 40

Gambar 4.1 Form Home 43

Gambar 4.2 Form Enkrispi 43

Gambar 4.3 Form Dekripsi 44

Gambar 4.4 Grafik Perbandingan Waktu Enkripsi dan Dekripsi 60 Gambar 4.5 Grafik Perbandingan Waktu Penyisipan dan Ekstrasi 64


(6)

DAFTAR LAMPIRAN

Halaman

Listing Program A-1