Implementasi Algoritma Kriptografi RC5 dan Metode Steganografi Least Significant Bit (LSB) Dalam Pengamanan File Teks
LISTING PROGRAM
1. Form1.vb
Imports System.Runtime.InteropServices Imports Microsoft.Office.Interop.Word Imports System.Text Imports System.IO Imports System Imports System.Xml Imports Microsoft.Office.Interop Imports System.Numerics
Public Class Form1
Dim w As Integer = 32 'block size dalam bit
Dim Pw As BigInteger = hextodec("B7E15163"), Qw As BigInteger = hextodec("9E3779B9") 'nilai magic untuk block size 32 bit
Dim round As Integer = 12 'jumlah round
Dim b_kecil As Integer = 16 'panjang password dalam byte/16 karakter Dim u As Integer = w / 8
Dim c As Integer = b_kecil / u Dim t As Integer = 2 * round + 2
Dim S As BigInteger() = New BigInteger(t) {} Dim L As BigInteger() = New BigInteger(c) {} Function bit_to_string(ByVal a As String) As String Dim total As Integer = 0
Dim sb, sb1 As New StringBuilder Dim temp As String = ""
For i As Integer = 1 To Len(a) sb.Append(Mid(a, i, 1))
If (Len(sb.ToString) = 8) Then
temp += Chr(Bin_To_Dec(sb.ToString)) sb.Clear()
End If Next Return temp End Function
Function string_to_bit(ByVal input As String) As String Dim Result As String = ""
For Each C As Char In input
Dim s As String = System.Convert.ToString(AscW(C), 2).PadLeft(8, "0")
Result &= s Next
Return Result End Function
Function desimal2biner(ByVal input As Long, ByVal bit As Integer) As String Dim biner_1 As String = ""
Dim tempbits As Long = Math.Pow(2, bit - 1) Dim inputcopy As Long = input
For i As Integer = 0 To bit - 1 If (inputcopy >= tempbits) Then inputcopy -= tempbits biner_1 = biner_1 + "1" Else
biner_1 = biner_1 + "0" End If
If (tempbits > 1) Then tempbits = tempbits / 2 End If
Next
Return biner_1 End Function
Function biner2desimal(ByVal input As String, ByVal bit As Integer) As Integer
Return Convert.ToInt16(input, 2) End Function
(2)
Function rotasikiri(ByVal input As Long, ByVal count As Integer, ByVal bit As Integer) As Long
Dim biner As String = desimal2biner(input, bit)
Dim binerrotasikiri As String = biner.Substring(count, biner.Length - count) + biner.Substring(0, count)
Return Convert.ToUInt64(binerrotasikiri, 2) End Function
Function rotasikanan(ByVal input As Long, ByVal count As Integer, ByVal bit As Integer) As Long
Dim biner As String = desimal2biner(input, bit)
Dim binerrotasikanan As String = biner.Substring(biner.Length - count, count) + biner.Substring(0, biner.Length - count)
Return Convert.ToUInt64(binerrotasikanan, 2) End Function
Function dectohex(ByVal dec As Long) As String Dim sHexValue As String = Hex$(dec) If (sHexValue.Length < 8) Then
For i As Integer = 1 To 8 - sHexValue.Length sHexValue = "0" + sHexValue
Next End If
Return sHexValue End Function
Function hextodec(ByVal hex As String) As BigInteger Return Convert.ToInt64(hex, 16)
End Function
Function hextostring(ByVal hex As String) As String Dim sb As New StringBuilder
For x = 0 To hex.Length - 1 Step 2 Dim k As String = hex.Substring(x, 2)
sb.Append(System.Convert.ToChar(System.Convert.ToUInt32(k, 16))) Next
Return sb.ToString End Function
Function stringtohex(ByVal input As String) As String Dim a As String = input
Dim temp As String = "" Dim temp2 As String = "" Dim sb As New StringBuilder Dim hex_string As String = "" For x As Integer = 1 To Len(a) temp = Mid(a, x, 1)
temp2 = System.Convert.ToString(Asc(temp), 2) 'mengkonversi string langsung ke bitnya
hex_string = Hex(Convert.ToInt32(temp2, 2)) If (hex_string.Length < 2) Then
hex_string = "0" + hex_string End If
sb.Append(hex_string) Next
Return sb.ToString End Function
Function Bin_To_Dec(ByVal Bin As String) As String 'function to convert a binary number to decimal
Dim dec As Double = Nothing Dim length As Integer = Len(Bin) Dim temp As Integer = Nothing Dim x As Integer = Nothing For x = 1 To length
temp = Val(Mid(Bin, length, 1)) length = length - 1
If temp <> "0" Then dec += (2 ^ (x - 1)) End If
Next Return dec End Function
Function index2x(ByVal index As BigInteger, ByVal width As BigInteger) 'mencari pixel x
Return index Mod width End Function
(3)
Function index2y(ByVal index As BigInteger, ByVal width As BigInteger) 'mencari pixel y
Return (index - (index Mod width)) / width End Function
Function dec_to_bin(ByVal dec As Integer) As String ' function to convert decimal to binary
Dim temp As String = Convert.ToString(dec, 2)
If (Len(temp) < 8) Then ' jika pjng bitnya kurang dari 8
While (Len(temp) < 8) ' selama pnjg bit kurang dr 8 tambahkan 0 ex: 1010 -> 00001010
temp = "0" + temp End While
End If Return temp End Function
'tab encrypt and embed
'==================================================
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
OpenFileDialog1.Filter = "Text Files (*.txt,*.docx,*.doc,*.rtf)|*.txt;*.docx;*.doc;*.rtf"
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
If Not String.IsNullOrEmpty(OpenFileDialog1.FileName) Then Dim pathfile, ext, filename As String
pathfile =
System.IO.Path.GetDirectoryName(OpenFileDialog1.FileName)
filename = System.IO.Path.GetFileName(OpenFileDialog1.FileName) ext = System.IO.Path.GetExtension(OpenFileDialog1.FileName) If (ext = ".docx" Or ext = ".doc" Or ext = ".rtf") Then Dim wdApp As New Word.Application
Dim wdDoc As New Word.Document
wdDoc = wdApp.Documents.Open(OpenFileDialog1.FileName) Dim myText As String = wdDoc.Range.Text
RichTextBox1.Text = myText
Label13.Text = RichTextBox1.Text.Length wdApp.Quit()
Else
RichTextBox1.Text =
System.IO.File.ReadAllText(OpenFileDialog1.FileName) End If
End If End If End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
OpenFileDialog1.Filter = "Image Files (*.jpeg,*.bmp,*.png,*.jpg)|*.jpeg;*.bmp;*.png;*.jpg"
OpenFileDialog1.FilterIndex = 1 Dim filepath, filename As String
filepath = System.IO.Path.GetDirectoryName(OpenFileDialog1.FileName) filename = System.IO.Path.GetFileName(OpenFileDialog1.FileName) If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
If Not String.IsNullOrEmpty(OpenFileDialog1.FileName) Then PictureBox1.Image = Image.FromFile(OpenFileDialog1.FileName) Dim data As Bitmap = New Bitmap(PictureBox1.Image)
panjang_gambar.Text = data.Width tinggi_gambar.Text = data.Height Else
End If End If End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
(4)
If PictureBox1.Image IsNot Nothing Then
SaveFileDialog1.Filter = "Image Files (*.jpeg)|*.jpeg"
If SaveFileDialog1.ShowDialog =
System.Windows.Forms.DialogResult.OK Then
PictureBox1.Image.Save(SaveFileDialog1.FileName) End If
End If
' save the image to the desktop End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
If String.IsNullOrEmpty(password.Text) Then MsgBox("Password Harus Diisi!")
ElseIf PictureBox1.Image Is Nothing Or RichTextBox1.Text = "" Then MsgBox("teks atau gambar belum ada")
Else Try
' RC5 32/12/16
Dim plaintext As String = stringtohex(RichTextBox1.Text) Dim pass As String = stringtohex(password.Text)
Dim x As Integer
Dim watch As Stopwatch = Stopwatch.StartNew() 'Padding Time
'================================================== 'Padding password
If (pass.Length Mod 32 <> 0) Then Dim sisa = 32 - pass.Length For x = 0 To sisa - 1 pass = pass + "0" Next
End If
'================================================== 'Padding plaintext
'================================================== If (plaintext.Length < 16) Then
Dim sisa = 16 - plaintext.Length For x = 0 To sisa - 1
plaintext = plaintext + "0" Next
Else
If (plaintext.Length Mod 8 <> 0) Then Dim sisa = 8 - plaintext.Length Mod 8 For x = 0 To sisa - 1
plaintext = plaintext + "0" Next
End If End If
'Pembuatan Array S
'================================================== S(0) = Pw
Dim i As Integer For i = 1 To t - 1
S(i) = (S(i - 1) + Qw) And 4294967295 Next
'================================================== 'Pembuatan array L
'================================================== Dim j As Integer
For i = 0 To 3 Step 1
Dim backward As String = "" For j = 0 To 3 Step 1
backward &= pass.Substring((i * 8) + (6 - (j * 2)), 2) Next
L(i) = hextodec(backward) Next
(5)
'================================================== j = 0
i = 0
Dim A As BigInteger = 0 Dim B As BigInteger = 0
For y As Integer = 1 To 3 * Math.Max(t, c)
S(i) = rotasikiri((S(i) + A + B) And 4294967295, 3, 32) A = S(i)
L(j) = rotasikiri((L(j) + A + B) And 4294967295, (A + B) Mod 32, 32)
B = L(j)
i = (i + 1) Mod t j = (j + 1) Mod c Next
'================================================== 'ENCRYPTION
'================================================== Dim ciphertext As String = ""
A = (hextodec(plaintext.Substring(0, 8)) + S(0)) And 4294967295 B = (hextodec(plaintext.Substring(8, 8)) + S(1)) And 4294967295 For i = 1 To round
A = (rotasikiri((A Xor B), B Mod 32, 32) + S(2 * i)) And 4294967295
B = (rotasikiri((B Xor A), A Mod 32, 32) + S(2 * i + 1)) And 4294967295
Next
ciphertext += dectohex(A) 'jika lebih dari 32 bit If plaintext.Length > 16 Then
For y As Integer = 1 To (plaintext.Length / 8 - 2) A = (B + S(0)) And 4294967295
B = (hextodec(plaintext.Substring(16 + (8 * (y - 1)), 8)) + S(1)) And 4294967295
For i = 1 To round
A = (rotasikiri((A Xor B), B Mod 32, 32) + S(2 * i)) And 4294967295
B = (rotasikiri((B Xor A), A Mod 32, 32) + S(2 * i + 1)) And 4294967295
Next
ciphertext += dectohex(A) Next
End If
ciphertext += dectohex(B)
'================================================== ' Embedding Time
'================================================== Dim plainbit As String = string_to_bit(ciphertext) Dim img As Bitmap = New Bitmap(PictureBox1.Image) Dim Color As Color
Dim panjang, lebar, pixelx, pixely As BigInteger Dim temp As String = ""
panjang = Val(panjang_gambar.Text) lebar = Val(tinggi_gambar.Text) Dim listAwal As New ArrayList Dim listRandom As New ArrayList
For i = 0 To plainbit.Length - 1 '(panjang * (lebar - 1)) - 1 ' merandom sebanyak pixel kemudian dimasukkan ke array
listAwal.Add(i) Next
Dim z1 As BigInteger = 1
Dim m1 As BigInteger = Math.Pow(2, 32) Dim a1 As BigInteger = 1664525
Dim c1 As BigInteger = 1013904223
For i = 0 To ((plainbit.Length - (plainbit.Length Mod 3) + 3) / 3) - 1 'Ini sudah N layer(plainbit.length) -> M pixel
z1 = (a1 * z1 + c1) Mod m1
Dim indexnow As Integer = Math.Floor((Double.Parse(z1.ToString()) / Double.Parse(m1.ToString())) * listAwal.Count)
listRandom.Add(listAwal(indexnow)) listAwal.RemoveAt(indexnow)
(6)
Next
Dim RGB(3) As Byte
For i = 0 To ((plainbit.Length - (plainbit.Length Mod 3) + (Math.Min(1, (plainbit.Length Mod 3)) * 3)) / 3) - 1
pixelx =
index2x(BigInteger.Parse(listRandom(i).ToString()), panjang)
pixely =
index2y(BigInteger.Parse(listRandom(i).ToString()), panjang) Color = img.GetPixel(pixelx, pixely) Dim LayerValue As Byte
Dim posisi_layer As Byte = 0 RGB(0) = Color.R
RGB(1) = Color.G RGB(2) = Color.B
While posisi_layer + i * 3 < plainbit.Length And posisi_layer < 3
temp = Integer.Parse(plainbit.Substring(i * 3 + posisi_layer, 1))
If (posisi_layer = 0) Then 'R LayerValue = Color.R
ElseIf (posisi_layer = 1) Then 'G LayerValue = Color.G
ElseIf (posisi_layer = 2) Then 'B LayerValue = Color.B
End If 'LSB
If (LayerValue Mod 2 = 1) Then '1
If (temp = 1) Then '1
Else '0
LayerValue = LayerValue - 1 End If
Else '0
If (temp = 1) Then '1
LayerValue = LayerValue + 1 Else
'0 End If End If
RGB(posisi_layer) = LayerValue posisi_layer = posisi_layer + 1 End While
img.SetPixel(pixelx, pixely, Color.FromArgb(RGB(0), RGB(1), RGB(2)))
Next
'Memasukkan Panjang ciphertext ke dalam pixel-pixel di layer B '==================================================
x = 0
Dim penanda As String = dec_to_bin(ciphertext.Length) + "0" Do
penanda = penanda + "1" x += 1
Loop Until x = Len(dec_to_bin(ciphertext.Length)) For i = 1 To Len(penanda)
Color = img.GetPixel(panjang - i, lebar - 1) Dim pixbit4 As String = dec_to_bin(Val(Color.B))
Dim change4 As String = pixbit4.Substring(0, pixbit4.Length - 1) & penanda.Substring(penanda.Length - i, 1)
img.SetPixel(panjang - i, lebar - 1, Color.FromArgb(Color.R, Color.G, Bin_To_Dec(change4)))
Next
PictureBox1.Image = img Button4.Visible = True
(7)
Label9.Text = watch.Elapsed.TotalMilliseconds MsgBox("Proses Selesai")
Catch ex As Exception
MsgBox("Cover Image Kurang Besar") End Try
End If End Sub
Private Sub Button8_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
If RichTextBox3.Text = RichTextBox5.Text Then MsgBox("sama")
Else
Dim s1 As String Dim s2 As String Dim s3 As String s1 = RichTextBox3.Text s2 = RichTextBox5.Text s3 = ""
For i As Integer = 0 To s1.Length - 1
If (s1.Substring(i, 1) <> s2.Substring(i, 1)) Then
s3 = s3 & s1.Substring(i, 1) & " " & string_to_bit(s1.Substring(i, 1)) & "->" & s2.Substring(i, 1) & " " & string_to_bit(s2.Substring(i, 1)) & vbNewLine
End If Next
RichTextBox5.Text = "" RichTextBox5.Text = s3 End If
End Sub
'================================================== 'tab extract and decrypt
'==================================================
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
OpenFileDialog1.Filter = "Image Files (*.jpeg,*.bmp,*.png,*.jpg)|*.jpeg;*.bmp;*.png;*.jpg"
OpenFileDialog1.FilterIndex = 1 Dim filepath, filename As String
filepath = System.IO.Path.GetDirectoryName(OpenFileDialog1.FileName) filename = System.IO.Path.GetFileName(OpenFileDialog1.FileName) If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
If Not String.IsNullOrEmpty(OpenFileDialog1.FileName) Then PictureBox2.Image = Image.FromFile(OpenFileDialog1.FileName) Dim data As Bitmap = New Bitmap(PictureBox2.Image)
Else End If End If End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
If RichTextBox1.Text IsNot Nothing Then SaveFileDialog1.DefaultExt = "*.txt"
SaveFileDialog1.Filter = "Text Files (*.txt)|*.txt"
If SaveFileDialog1.ShowDialog() =
System.Windows.Forms.DialogResult.OK And (SaveFileDialog1.FileName.Length) > 0 Then RichTextBox2.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.UnicodePlainText) End If End If End Sub
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
Dim ciphertext As String = ""
If String.IsNullOrEmpty(password2.Text) Then MsgBox("Password Belum Diisi")
ElseIf PictureBox2.Image Is Nothing Then MsgBox("stego image belum ada") Else
(8)
'================================================== Dim img As Bitmap = New Bitmap(PictureBox2.Image) Dim pixbit5 As String
Dim batas As Integer Dim penanda As String = "" Dim Color As Color
Dim panjang, lebar As BigInteger panjang = img.Width
lebar = img.Height
Dim watch As Stopwatch = Stopwatch.StartNew()
'Pengambilan Panjang ciphertext dari pixel2 di layer B '================================================== Dim r = 0
Do
r += 1
Color = img.GetPixel(panjang - r, lebar - 1) pixbit5 = dec_to_bin(Val(Color.B))
Loop While pixbit5.Substring(pixbit5.Length - 1, 1) <> 0 Dim y = 0
batas = r Do
r += 1
Color = img.GetPixel(panjang - r, lebar - 1) pixbit5 = dec_to_bin(Val(Color.B))
penanda = pixbit5.Substring(pixbit5.Length - 1, 1) + penanda y += 1
Loop Until y = batas - 1
'================================================== Dim len_in_bit As Integer = Val(Bin_To_Dec(penanda)) * 8 Dim pixelx, pixely As BigInteger
Dim i As Integer
Dim listAwal As New ArrayList Dim listRandom As New ArrayList
For i = 0 To len_in_bit - 1 ' merandom sebanyak pixel kemudian dimasukkan ke array
listAwal.Add(i) Next
Dim z1 As BigInteger = 1
Dim m1 As BigInteger = Math.Pow(2, 32) Dim a1 As BigInteger = 1664525
Dim c1 As BigInteger = 1013904223
For i = 0 To ((len_in_bit - (len_in_bit Mod 3) + 3) / 3) - 1 'Ini sudah N layer(plainbit.length) -> M pixel
z1 = (a1 * z1 + c1) Mod m1
Dim indexnow As Integer =
Math.Floor((Double.Parse(z1.ToString()) / Double.Parse(m1.ToString())) * listAwal.Count)
listRandom.Add(listAwal(indexnow)) listAwal.RemoveAt(indexnow) Next
Dim RGB(3) As Byte
Dim kumpulanBit As String = ""
For i = 0 To ((len_in_bit - (len_in_bit Mod 3) + 3) / 3) - 1
pixelx = index2x(BigInteger.Parse(listRandom(i).ToString()), panjang)
pixely = index2y(BigInteger.Parse(listRandom(i).ToString()), panjang)
Color = img.GetPixel(pixelx, pixely) Dim posisi_layer As Byte = 0
RGB(0) = Color.R RGB(1) = Color.G RGB(2) = Color.B
(9)
posisi_layer = posisi_layer + 1 End While
Next
ciphertext &= bit_to_string(kumpulanBit)
'================================================== 'Pembuatan Array S
'================================================== Dim pass As String = stringtohex(password2.Text) S(0) = Pw
For i = 1 To t - 1
S(i) = (S(i - 1) + Qw) And 4294967295 Next
'Padding Time
'================================================== 'Padding password
If (pass.Length Mod 32 <> 0) Then Dim sisa = 32 - pass.Length For x = 0 To sisa - 1 pass = pass + "0" Next
End If
'================================================== 'Pembuatan array L
'================================================== Dim j As Integer
For i = 0 To 3 Step 1
Dim backward As String = "" For j = 0 To 3 Step 1
backward &= pass.Substring((i * 8) + (6 - (j * 2)), 2) Next
L(i) = hextodec(backward) Next
' MsgBox("lewat")
'================================================== 'Pencampuran Array L dan S
'================================================== j = 0
i = 0
Dim A As BigInteger = 0 Dim B As BigInteger = 0
For y = 1 To 3 * Math.Max(t, c)
S(i) = rotasikiri((S(i) + A + B) And 4294967295, 3, 32) A = S(i)
L(j) = rotasikiri((L(j) + A + B) And 4294967295, (A + B) Mod 32, 32)
B = L(j)
i = (i + 1) Mod t j = (j + 1) Mod c Next
'================================================== 'Proses Dekripsi ciphertext menjadi plaintext '================================================== Dim plaintext As String = ""
B = hextodec(ciphertext.Substring(ciphertext.Length - 8, 8)) And 4294967295
A = hextodec(ciphertext.Substring(ciphertext.Length - 16, 8)) And 4294967295
For i = round To 1 Step -1
' RichTextBox1.Text &= dectohex((2 * i + 1)) & vbNewLine
B = (rotasikanan((B - S(2 * i + 1) And 4294967295), A Mod 32, 32) Xor A)
A = (rotasikanan((A - S(2 * i) And 4294967295), B Mod 32, 32) Xor B)
' RichTextBox1.Text &= "A : " & dectohex(A) & " B : " & dectohex(B) & vbNewLine
Next
(10)
A = (A - S(0)) And 4294967295 plaintext += dectohex(B) 'jika ciphertext > 16
If ciphertext.Length > 16 Then Dim z = 24
For y = 1 To (ciphertext.Length / 8 - 2) B = A
A = hextodec(ciphertext.Substring(ciphertext.Length - z, 8))
For i = round To 1 Step -1
B = (rotasikanan((B - S(2 * i + 1) And 4294967295), A Mod 32, 32) Xor A)
A = (rotasikanan((A - S(2 * i) And 4294967295), B Mod 32, 32) Xor B)
Next
B = B - S(1) And 4294967295 A = A - S(0) And 4294967295 z += 8
plaintext = dectohex(B) + plaintext Next
End If
plaintext = dectohex(A) + plaintext
RichTextBox2.Text &= hextostring(plaintext) Button5.Visible = True
watch.Stop()
Label20.Text = watch.Elapsed.TotalMilliseconds MsgBox("Proses Selesai") '================================================== End If End Sub '================================================== 'tab compare '==================================================
Private Sub Button9_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
OpenFileDialog1.Filter = "Image Files (*.jpeg,*.bmp,*.png,*.jpg)|*.jpeg;*.bmp;*.png;*.jpg"
OpenFileDialog1.FilterIndex = 1 Dim filepath, filename As String
filepath = System.IO.Path.GetDirectoryName(OpenFileDialog1.FileName) filename = System.IO.Path.GetFileName(OpenFileDialog1.FileName) If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
If Not String.IsNullOrEmpty(OpenFileDialog1.FileName) Then PictureBox4.Image = Image.FromFile(OpenFileDialog1.FileName) Dim data As Bitmap = New Bitmap(PictureBox4.Image)
width1.Text = "Width : " & data.Width height1.Text = "Height : " & data.Height Else
End If End If End Sub
Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
OpenFileDialog1.Filter = "Image Files (*.jpeg,*.bmp,*.png,*.jpg)|*.jpeg;*.bmp;*.png;*.jpg"
OpenFileDialog1.FilterIndex = 1 Dim filepath, filename As String
filepath = System.IO.Path.GetDirectoryName(OpenFileDialog1.FileName) filename = System.IO.Path.GetFileName(OpenFileDialog1.FileName) If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
If Not String.IsNullOrEmpty(OpenFileDialog1.FileName) Then PictureBox5.Image = Image.FromFile(OpenFileDialog1.FileName) Dim data As Bitmap = New Bitmap(PictureBox5.Image)
width2.Text = "Width : " & data.Width height2.Text = "Height : " & data.Height Else
End If End If
(11)
Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click
If PictureBox4.Image Is Nothing Or PictureBox5.Image Is Nothing Then MsgBox("Cover Image atau Stego Image Kosong")
Else
Dim nilaimse As Double = 0
Dim img As Bitmap = New Bitmap(PictureBox4.Image) Dim img2 As Bitmap = New Bitmap(PictureBox5.Image) Dim Color As Color
Dim color2 As Color
If img.Width = img2.Width And img.Height = img2.Height Then For i As Integer = 0 To img.Width - 1
For j As Integer = 0 To img.Height - 1 Color = img.GetPixel(i, j)
color2 = img2.GetPixel(i, j)
nilaimse += Math.Pow(Integer.Parse(Color.R) - Integer.Parse(color2.R), 2) _
+ Math.Pow(Integer.Parse(Color.G) - Integer.Parse(color2.G), 2) _
+ Math.Pow(Integer.Parse(Color.B) - Integer.Parse(color2.B), 2)
Next Next
nilaimse = nilaimse / (img.Width * img.Height * 3) mse.Text = nilaimse.ToString
Dim nilaipsnr As Double = 10 * Math.Log10(255 * 255 / nilaimse) psnr.Text = (nilaipsnr & " dB")
If nilaipsnr < 30 Then ' quality.Text = "Low" Else
' quality.Text = "High" End If
Else
MsgBox("Ukuran Kedua Gambar Tidak Sama") End If
End If End Sub
'==================================================
Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
Label13.Text = RichTextBox1.Text.Length End Sub
(12)
CURRICULUM VITAE
DATA PRIBADI
PENDIDIKAN FORMAL
1999 – 2000 Taman Kanak-kanak Budi Utomo
2000 – 2006 SD Budi Utomo
2006 – 2009 SMP Budi Utomo
2009 – 2012 SMA Sutomo 1
2012 – sedang berlangsung Universitas Sumatera Utara
Program Studi : S-1 Ilmu Komputer
KEMAMPUAN
Programming Visual Basic, Javascript, HTML
Database MySQL
Bahasa Indonesia, Inggris, Mandarin
Nama Lengkap Boris Mario
Jenis Kelamin 121401066
Tempat, Tanggal Lahir Medan, 20 Desember 1994
Agama Buddha
Alamat Jl. Pukat VIII No.47 Medan
No.HP 087868883989
E-mail [email protected]
Alamat Orang Tua Jl. Pukat VIII No.47 Medan
(13)
Alatas, P. 2009. Implementasi Teknik Steganografi Dengan Metode LSB Pada CitraDigital. (Online) http://www.gunadarma.ac.id/library/articles/graduate/ computer-science/2009/Artikel_11104284.pdf (06 November 2015).
Cheddad, A, Condell. J, Curran. K, Kevitt. P.Mc, 2010. Digital Image Steganography : Survey and Analysis of Current Methods. Signal Processing 90(3):727-752.
Fairuzabadi, M & Rakhmat, B. 2010. Steganografi Menggunakan Metode Least Significant Bit Dengan Kombinasi Algoritma Kriptografi Vigenere dan RC4.
Jurnal Dinamika Informatika 5(2): 1-17.
Hastuti, K & Hidayat, E.Y. 2013. Analisis Steganografi Metode Least Significant Bit (LSB) dengan Penyisipan Sekuensial dan Acak Secara Kuantitatif dan Visual. Techno.COM 12(3): 157-167.
Handrizal & Zarlis, M. 2008 . Algortima & Pemrograman : Teori dan Praktik
dalam Pascal. Edisi Kedua. USU PRESS: Medan.
Hemachandran, K & Laskar , S.A. 2013. Steganography Based On Random Pixel Selection For Efficient Data Hiding. International Journal of Computer
Engineering and Technology (IJCET) 4(2): 31-44.
Kadir, A. & Susanto, A. 2013. Teori dan Aplikasi Pengolahan Citra. ANDI: Yogyakarta.
Kromodimoeljo, S. 2010. Teori dan Aplikasi Kriptografi. SPK IT Consulting: Jakarta.
Mahmudy, W.F & Setiana. 2006. Steganografi Pada File Citra Bitmap 24 Bit Untuk Pengamanan Data Menggunakan Metode Least Significant Bit (LSB) Insertion. Kursor 2(2): 38-44.
Mollin, R.A. 2007. An Introduction to Cryptography. 2nd Edition. Taylor & Francis Group, LLC : United State of America.
(14)
Rhee, M.Y. 2003. Internet Security: Cryptographic Principles, Algorithms and
Protocols. Wiley : New York.
Saputra, A & Tinaliah, R. 2009. Perbandingan Enkripsi dan Dekripsi Password Menggunakan Metode Serpent dan RC5 Pada Aplikasi Perpustakaan Universitas Muhammadiyah Palembang. (Online) http://eprints.mdp.ac.id/ 794/1/JURNAL%202009250506%20ARIANSYAH%20SAPUTRA.pdf (13 November 2015).
Sari, S.P.,Sudirman, D.Z. & Winarmo. 2012,. Implementasi Steganografi Menggunakan Metode Least Significant Bit dan Kriptografi Advanced Encryption Standard. ULTIMATICS 4(1): 25-32.
Whitten, J.L., Bentley, L.D. & Dittman, K.C. 2004. Metode Desain & Analisis
(15)
3.1 Analisis Sistem
Analisis sistem adalah sebuah teknik pemecahan masalah yang menguraikan sebuah sistem menjadi bagian-bagian komponen dengan tujuan mempelajari apakah komponen-komponen tersebut bekerja dan berinteraksi sesuai dengan tujuan mereka. Ada tiga fase analisis sistem yaitu : analisis masalah, analisis persyaratan dan analisis proses. Analisis masalah bertujuan untuk memahami kelayakan masalah. Analisis persyaratan dilakukan untuk menjelaskan fungsi-fungsi yang ditawarkan dan mampu dikerjakan sistem. Sedangkan analisis proses untuk memodelkan tingkah laku sistem.
3.1.1 Analisis Masalah
Permasalahan yang akan diselesaikan pada sistem ini adalah mengamankan file teks dari pihak-pihak yang tidak berkepentingan dengan cara mengenkripsi file teks terlebih dahulu kemudian disisipkan ke dalam suatu gambar. Pada penelitian ini, akan diimplementasikan pengamanan file teks dengan menggunakan algoritma kriptografi klasik RC5 dan metode steganografi Least Significant Bit (LSB).
Untuk mengidentifikasi masalah tersebut digunakan diagram Ishikawa (fishbone diagram). Diagram Ishikawa merupakan suatu alat visual untuk mengidentifikasi, mengeksplorasi, dan secara diagram menggambarkan semua penyebab yang berhubungan dengan suatu permasalahan. Diagram ini menunjukkan sebuah akibat dari permasalahan dengan berbagai penyebabnya (Whitten et al, 2004).
(16)
Gambar 3.1 Diagram Ishikawa Masalah Penelitian
Berdasarkan Gambar 3.1, ada dua hal yang paling utama, yaitu bagian permasalahan utama dan penyebabnya. Permasalahan yang dihadapi adalah untuk meningkatkan keamanan file teks dengan kriptografi dan steganografi , dan penyebab munculnya permasalahan adalah kecurigaan yang timbul terhadap ciphertext sebagai hasil dari enkripsi. Solusi yang ditawarkan adalah menyisipkan ciphertext kedalam gambar untuk menghilangkan kecurigaan tersebut.
3.1.2 Analisis Persyaratan
Analisis persyaratan terbagi atas dua bagian, yaitu persyaratan fungsional dan persyaratan non fungsional. Persyaratan fungsional mendeskripsikan aktivitas yang disediakan suatu sistem. Sedangkan kebutuhan nonfungsional mendeskripsikan fitur, karakteristik dan batasan lainnya (Whitten et al, 2004).
Manusia Metode
Material Sistem
Meningkatkan kemanan file teks dengan kriptografi dan steganografi
Pengirim dan penerima
File teks
(*.txt,*rtf, *docx, dan *doc)
Cover image
(*.bmp, *.jpeg,*. jpg dan *.png)
RC5 & LSB
Enkripsi & Sisip
Ciphertext
menimbulkan kecurigaan
Pihak ketiga
Data bersifat rahasia
(17)
3.1.2.1 Persyaratan Fungsional
Kebutuhan fungsional adalah menjelaskan proses-proses aktifitas yang dapat dilakukan oleh sistem dalam melakukan pelayanan yang dilakukan sistem dan kebutuhan yang harus dipenuhi oleh sistem, yaitu:
1. Fungsi Enkripsi dan Sisip
Pengguna dapat melakukan proses enkripsi file teks dari plaintext menjadi
ciphertext dengan memasukkan kunci enkripsi terlebih dahulu kemudian
menyisipkan ciphertext tersebut ke dalam cover image yang telah dipilih. 2. Fungsi Ekstrasi dan Dekripsi
Pengguna dapat melakukan proses ekstraksi stego image menjadi ciphertext dan proses dekripsi ciphertext ke plaintext dengan memasukkan stego image dan kunci dekripsi terlebih dahulu.
3.1.2.2 Persyaratan Non-fungsional
Persyaratan non-fungsional meliputi karakteristik berikut ini :
1. Performa
Sistem yang akan dibangun dapat menyembunyikan file teks dan menampilkannya dalam bentuk stego image dan sistem juga dapat mendapatkan kembali file teks awal dari stego image yang dimasukkan.
2. Mudah dipelajari dan digunakan
Sistem yang akan dibangun memiliki tampilan yang user friendly sehingga mudah dipahami dan digunakan oleh pengguna (user).
3. Hemat Biaya
Sistem yang akan dibangun tidak memerlukan perangkat tambahan atau perangkat pendukung lainnya yang dapat mengeluarkan biaya yang besar.
4. Dokumentasi
Sistem yang akan dibangun dapat menyimpan citra digital hasil penyisipan dan teks hasil dekripsi. Sistem juga dapat menampilkan waktu dari setiap proses yang dijalankan.
(18)
5. Kontrol
Sistem akan menampilkan pesan error untuk setiap input yang tidak sesuai serta memiliki kontrol berupa enable dan disable, yaitu ketika citra atau file teks belum diinput maka tombol fungsi pada sistem dalam keadaan tidak aktif atau disable, dan setelah citra atau file teks sudah diinput maka tombol fungsi tertentu akan aktif.
3.1.3 Analisis Proses
Sistem yang dibangun menggunakan bahasa pemrograman Visual Basic 2010. Algoritma kriptografi yang digunakan untuk mengamankan file teks adalah RC5 yang kemudian dikombinasikan dengan metode steganografi Least Significant Bit (LSB). Kunci enkripsi ditentukan oleh pengguna sendiri. Kunci enkripsi berfungsi sebagai kunci rahasia dalam melakukan proses enkripsi. Setelah dilalukan proses enkripsi maka dilakukan proses penyisipan dengan mengacak pixel-pixel sesuai dengan panjang ciphertext hasil enkripsi.
Dalam mendapatkan file teks awal dilakukan kebalikan dari proses sebelumnya yaitu melakukan proses ektraksi citra terlebih dahulu kemudian dilakukan proses dekripsi dengan kunci dekripsi yang sama seperti kunci enkripsi.
3.2 Perancangan Sistem
Pemodelan sistem dilakukan untuk menunjukkan dan mendeskripsikan gambaran dari sistem yang akan dibangun. Pada penelitian ini dilakukan pemodelan dengan menggunakan UML untuk mendesain serta merancang sistem.UML adalah bahasa yang digunakan untuk memberikan penjelasan mengenai komponen-komponen untuk membangun sistem dan interaksi antar komponen sistem. Model UML yang digunakan dalam penelitian ini antara lain adalah use case diagram, activity diagram serta sequence diagram.
(19)
3.2.1 Use Case Diagram
Use case merupakan gambaran dari interaksi antara sistem dan aktor yang berisi requirement yang terdapat pada sistem tersebut. Adapun use case dari sistem yang
akan dibangun pada penelitian ini dapat dilihat pada Gambar 3.2.
Gambar 3.2 Use Case Diagram
3.2.2 Activity Diagram
Activity diagram merupakan salah satu jenis diagram pada UML yang memodelkan
proses-proses apa saja yang terjadi di dalam sistem. Berikut beberapa activity diagram dari sistem yang akan dirancang :
(20)
Gambar 3.3 Activity Diagram Pengamanan
Gambar 3.3 menggambarkan aktivitas pada sistem saat user melakukan proses pengamanan. User memasukkan file teks, cover image, dan kunci rahasia, kemudian,
user menekan tombol mulai. Sistem akan melanjutkan dengan membaca kunci rahasia
yang telah diinputkan sebelumnya. Selanjutnya, sistem akan melakukan proses enkripsi terhadap teks yang dimasukkan dengan algoritma RC5. Selanjutnya, sistem melakukan proses penyisipan ciphertext hasil dari enkripsi RC5 ke dalam cover image
cover image yang telah dipilih oleh user dan sistem akan menampilkan tombol simpan
Sistem User
Cari File Teks OpenDialog dan Membaca File Teks ke Richtextbox
Cari Cover Image OpenDialog dan Membaca Cover Image ke Picturebox
Input Kunci Rahasia
Klik Mulai
Sistem Mengenkripsi Teks dengan Algoritma RC5
Sistem Menyisipkan Ciphertext ke Cover Image dengan LSB
Sistem Menampilkan Stego Image ke Picturebox
Klik Simpan Stego Image Sistem Menampilkan Lama Eksekusi dan Tombol Simpan Stego Image
Sistem Menyimpan Stego Image Sistem Membaca Kunci Rahasia
(21)
stego image setelah proses selesai. Selanjutnya, stego image akan disimpan oleh
sistem jika user menekan tombol simpan stego image.
Gambar 3.4 Activity Diagram Pengungkapan
Gambar 3.4 menggambarkan aktivitas pada sistem saat user melakukan proses pengungkapan. User memasukkan stego image dan kunci rahasia. Selanjutnya, Sistem membaca kunci rahasia tersebut kemudian dilakukan proses ekstrasi dan proses dekripsi secara berturut. Selanjutnya, sistem akan menampilkan tombol simpan teks dan sistem akan menyimpan teks jika user menekan tombol simpan teks tersebut.
Sistem User
Cari Stego Image
Sistem Melakukan Dekripsi Ciphertext Hasil Ekstrasi dengan RC5 Sistem Membaca Kunci Rahasia
OpenDialog dan Membaca Stego Image ke PictureBox
Input Kunci Rahasia
Klik Mulai
Sistem Menampilkan teks hasil dekripsi ke Richtextbox Sistem Melakukan Ekstrasi Citra Dengan Metode LSB
Sistem Menampilkan Lama Eksekusi dan Tombol Simpan Teks Klik Simpan Teks
(22)
Gambar 3.5 Activity Diagram Hitung MSE dan PSNR
Gambar 3.5 menggambarkan aktivitas pada sistem saat user melakukan proses perhitungan MSE dan PSNR. User memasukkan cover image dan stego image. Kemudian, sistem akan melakukan pengecekan terhadap tinggi dan lebar kedua gambar tersebut. Jika tinggi ataupun lebar kedua gambar tidak sama, maka user harus memasukkan kembali gambar yang memliki tinggi dan lebar yang sama. Setelah syarat tersebut terpenuhi, maka sistem akan menghitung nilai MSE dan PSNR dari kedua gambar tersebut dan menampilkan kedua nilai tersebut.
3.2.3 Sequence Diagram
Sequence diagram merupakan salah satu jenis diagram pada UML yang
menggambarkan interaksi antar objek berdasarkan urutan waktu. Sequence diagram dari sistem yang akan dibangun dapat dilihat pada Gambar 3.6.
Sistem User
Cari Cover Image
Klik Bandingkan Cari Stego Image
OpenDialog dan Menampilkan Cover Image ke Picturebox
Sistem Menghitung MSE dan PSNR Sistem Mengecek Tinggi dan Lebar Kedua Citra
Sistem Menampilkan Nilai MSE dan PSNR OpenDialog dan Menampilkan Stego Image ke Picturebox
(23)
Gambar 3.6 Sequence Diagram Sistem
Gambar 3.6 menunjukkan diagram sequence dari sistem yang akan dibangun. Pertama sistem akan melakukan proses pengamanan. Pada proses pengamanan terdapat
beberapa hal yang harus diinput oleh user diantaranya adalah file teks, cover image, dan kunci rahasia . Kemudian, user menekan tombol mulai untuk melakukan proses enkripsi dan embedding dan sistem akan menampilkan stego image yang telah terisi
ciphertext didalamnya. Setelah user melakukan penyimpanan stego image dilanjutkan
ke proses pengungkapan. Pada proes pengungkapan, user harus memasukkan stego
image dan kunci rahasia. Setelah itu, user menekan tombol mulai dan sistem akan
melakukan proses ekstraksi dan dekripsi sehingga sistem akan menampilkan hasil berupa teks awal dan user dapat melakukan penyimpanan teks tersebut. Pada proses
Hitung MSE dan PSNR Pengamanan Pengungkapan
Cari File Teks
Cari Cover Image Tampil Teks
Tampil Stego Image
Input Kunci Rahasia
Klik Mulai
Tampil Lama Eksekusi, Stego Image dan Button Simpan Stego image
Cari Stego Image Tampil Cover Image
Tampil Lama Eksekusi, Teks Awal dan Button Simpan Teks Input Kunci Rahasia
Klik Mulai
Input Cover Image Tampil Cover Image
Input Stego Image
Tampil Stego Image
Klik Bandingkan
Tampil Nilai MSE dan PSNR Klik Simpan Stego Image
Simpan Stego Image
Klik Simpan Teks
(24)
perhitungan MSE dan PSNR, user harus terlebih dahulu memasukkan cover image dan stego image dengan lebar dan tinggi yang sama. Selanjutnya, sistem akan melakukan proses perhitungan MSE dan PSNR. Selanjutnya, sistem akan menampilkan nilai MSE dan PSNR kepada user.
3.2.4 Flowchart
Flowchart merupakan suatu bagan yang menggambarkan urutan suatu proses secara
rinci menggunakan simbol-simbol tertentu dan menggambarkan hubungan antara satu proses dengan proses lainnya dengan menggunakan tanda panah. Selain itu, flowchart juga memiliki fungsi memudahkan proses pengecekan terhadap sistem yang akan dibuat.
3.2.4.1 Flowchart Sistem
Berikut merupakan flowchart dari sistem yang dibangun dapat dilihat pada Gambar 3.7.
Gambar 3.7 Flowchart Sistem
Input File Teks, Input Cover Image, Input Kunci Rahasia Proses Enkripsi Proses Embedding Stego Image, Lama Eksekusi Input Stego Image, Input Kunci Rahasia Proses Ekstrasi Proses Dekripsi Plain Teks, Lama Eksekusi Selesai Input Cover Image, Input Stego Image Proses Perhitungan MSE dan PSNR Nilai MSE dan PSNR Mulai A A B B
(25)
Pada gambar 3.7 terdapat tiga pilihan halaman yang dapat dipilih oleh user yaitu : Halaman Pengamanan, Pengungkapan dan Hitungan MSE dan PSNR. Halaman Pengamanan berfungsi untuk menenkripsikan dan menyisipkan file teks ke dalam
cover image. Halaman pengungkapan berfungsi untuk mendapatkan kembali teks awal
dengan mengekstraksi stego image dan mendekripsikan hasil ekstrasi tersebut. Halaman perhitungan MSE dan PSNR berfungsi untuk melakukan pengecekan terhadap kualitas citra sebelum dan sesudah disisipkan.
3.2.4.2 Flowchart Enkripsi RC5
Berikut merupakan flowchart enkripsi RC5 dari sistem yang dibangun dapat dilihat pada Gambar 3.8.
Gambar 3.8 Flowchart Enkripsi RC5
Mulai
Inisialisasi w,r,b u = w/8 c = b/u
Simpan kunci rahasia ke dalam array K[b]
Lakukan pengembangan kunci rahasia yang tersimpan di K[b] ke dalam
array L[0..c-1] Inisialisasi tabel kunci S[1..2r+1] Input kunci rahasia, Input plain teks
Campurkan array L dan array S
bagi plain teks ke dalam dua register A dan B sebanyak
32-bit
Inisialisasi register A = A + S[0] B = B + S[1]
i = 1
Lakukan operasi X-OR – rotasi kiri – penjumlahan A = ((A ⊕ B)<<B)+ S[2*i], B = ((B ⊕ A)<<A)+ S[2*i + 1]
i += 1
i = r ?
Akhir plain teks? selesai A A Cipher teks tidak tidak ya ya
(26)
3.2.4.3 Flowchart Dekripsi RC5
Berikut merupakan flowchart Dekripsi RC5 dari sistem yang dibangun dapat dilihat pada Gambar 3.9.
Gambar 3.9 Flowchart Dekripsi RC5
Mulai
Inisialisasi w,r,b u = w/8
c = b/u
Simpan kunci rahasia ke dalam array K[b]
Lakukan pengembangan kunci rahasia yang tersimpan di K[b] ke dalam
array L[0..c-1]
Inisialisasi tabel kunci S[1..2r+1]
Input kunci rahasia, Input cipher
teks
Campurkan array L dan array S
bagi cipher teks ke dalam dua register A dan B sebanyak
32-bit
i = r
B = ((B − S[2i + 1]) >>> A) ⊕ A A = ((A − S[2i]) >>> B) ⊕ B
i -=1
i = 1 ?
Akhir cipher teks?
selesai A
A
Plain teks tidak
tidak ya
ya
A = A - S[0] B = B - S[1]
(27)
3.2.4.4 Flowchart Embedding Teks ke Cover Image
Berikut merupakan flowchart Embedding Teks ke Cover Image dari sistem yang dibangun dapat dilihat pada Gambar 3.10.
Gambar 3.10 Flowchart Embedding Teks Ke Cover Image
mulai
Input plain teks, Input cover
image
Ubah setiap karakter plain teks ke dalam susunan
bit
Bangkitkan Algoritma Random
Sisipkan setiap bit dari plain teks ke bit terakhir
pixel yang terpilih
Ubah kembali nilai pixel ke dalam warna RGB
Stego image
(28)
3.2.4.5 Flowchart Exctracting Teks dari Stego Image
Berikut merupakan flowchart Exctracting Teks dari Stego Image dari sistem yang dibangun dapat dilihat pada Gambar 3.11.
Gambar 3.11 Flowchart Exctracting Teks Dari Stego Image
mulai
Input stego image
Ambil bit terakhir dari pixel yang
terpilih
Susun bit tersebut menjadi stream bit
Ubah stream bit menjadi karakter
selesai Bangkitkan algoritma random untuk memilih
pixel
(29)
3.2.4.6 Flowchart Perhitungan MSE dan PSNR
Berikut merupakan flowchart Perhitungan MSE dan PSNR dari sistem yang dibangun dapat dilihat pada Gambar 3.12.
Gambar 3.12 Flowchart Perhitungan MSE dan PSNR
3.2.5 Pseudocode
Pseudocode merupakan kode yang mirip dengan instruksi kode program yang
sebenarnya. Pseudocode bertujuan untuk memudahkan manusia dalam pemahaman dibandingkan menggunakan bahasa pemrograman yang umum digunakan. Pada penelitian ini terdapat pseudocode yang mewakili fungsi pada sistem.
Mulai
Citra1, Citra2
If citra1.width= citra2.width and
citra1.height=citra2.height
Tidak
Hitung MSE dan PSNR
Nilai MSE dan PSNR
(30)
3.2.5.1 Pseudocode Enkripsi RC5
Gambar 3.13 Pseudocode Enkripsi RC5
3.2.5.2 Pseudocode Dekripsi RC5
Gambar 3.14 Pseudocode Dekripsi RC5
3.2.5.3 Pseudocode Hitung MSE dan PSNR
Gambar 3.15 Pseudocode Hitung MSE dan PSNR
3.3 Perancangan Antarmuka (Interface)
Perancangan antarmuka (interface) suatu sistem merupakan salah satu bagian yang penting dalam membangun sebuah sistem. Antarmuka yang dirancang sebaiknya memperhatikan faktor pengguna agar pengguna mudah dan nyaman saat
A A + S[0] B B + S[1] for i = 1 to r do:
A ((A ⊕B) <<< B) + S[2 * i] B ((B ⊕A) <<< A) + S[2 * i + 1] return A, B
for i = r down to 1 do:
B ((B - S[2 * i + 1]) >>> A) ⊕ A A ((A - S[2 * i]) >>> B) ⊕ B B B - S[1]
A A - S[0] return A, B
sum 0.0 mse 0.0
for x = 0 to picture1.width-1
for(y = 0; y < picture1.height; ++y){ color = picture1.GetPixel(i, j) color2 = picture2.GetPixel(i, j)
sum sum + Math.pow(color.R - color2.R, 2) _ + Math.pow(color.G - color2.G, 2) _ + Math.pow(Color.B - color2.B, 2)
mse sum /(picture1.width*picture1.height*3) psnr 10 * Math.Log10(255 * 255 / mse)
(31)
menggunakan sistem tersebut. Adapun antarmuka yang akan dirancang pada sistem ini adalah halaman Pengamanan, Pengungkapan, dan Hitung MSE dan PSNR.
3.3.1 Halaman Pengamanan
Halaman Pengamanan merupakan halaman yang pertama kali ditampilkan saat sistem dijalankan. Pada halaman Pengamanan terdapat beberapa menu untuk mengakses halaman lain. Rancangan halaman Pengamanan dapat dilihat pada Gambar 3.16
Gambar 3.16 Rancangan Interface Halaman Pengamanan
Tabel 3.1 Keterangan Gambar Rancangan Interface Halaman Pengamanan
No Keterangan
1 Menu “Pengamanan” untuk menampilkan halaman proses enkripsi dan
embedding
2 Menu “Pengungkapan” untuk menampilkan halaman proses extracting dan dekripsi
3 Menu “Hitung MSE dan PSNR” untuk menampilkan halaman perhitungan MSE dan PSNR
4 Button “Browse Teks” untuk membuka direktori dan memilih file teks yang akan dienkripsikan
5 Button “Browse Cover Image” untuk membuka direktori dan memilih citra yang
Pengamanan Pengungkapan Hitung MSE dan PSNR
Browse Teks Browse Cover
Image
Simpan Stego Image
Password :
RC5 32/12/16, Steganografi LSB
Lama Eksekusi :
Panjang : Lebar :
Mulai
Boris Mario 121401066
1 2
3
7 4
8
9
10
12
11
13
14
5 6
Panjang Teks :
(32)
akan disisipi
6 Button “Save Stego Image” untuk memilih direktori tempat menyimpan citra hasil penyisipan
7 Textbox untuk memasukkan password atau kunci rahasia
8 Richtextbox untuk menampilkan isi dari file teks yang telah dipilih
9 Label untuk menampilkan lamanya proses enkripsi dan embedding
10 Label untuk menampilkan panjang teks
11 Button “Mulai” untuk melakukan proses enkripsi dan embedding
12 Picturebox untuk menampilkan citra yang telah dipilih 13 Label untuk panjang dari citra yang telah dipilih 14 Label untuk lebar dari citra yang telah dipilih
3.3.2 Halaman Pengungkapan
Halaman Pengungkapan merupakan halaman yang berfungsi untuk melakukan proses pengungkapan teks awal dari citra yang telah disisipi. Pada halaman Pengungkapan terdapat beberapa menu untuk mengakses halaman lain. Rancangan halaman Pengungkapan dapat dilihat pada Gambar 3.17
Gambar 3.17 Rancangan Interface Halaman Pengungkapan Pengamanan Pengungkapan Hitung MSE dan PSNR
Browse Stego Image Simpan Teks
Password :
RC5 32/12/16, Steganografi LSB
Lama Eksekusi :
Mulai
Boris Mario 121401066
1 3
4
7 10
6
5
8
9 2
(33)
Tabel 3.2 Keterangan Gambar Rancangan Interface Halaman Pengungkapan
No Keterangan
1 Menu “Pengamanan” untuk menampilkan halaman proses enkripsi dan
embedding
2 Menu “Pengungkapan” untuk menampilkan halaman proses extracting dan dekripsi
3 Menu “Hitung MSE dan PSNR” untuk menampilkan halaman perhitungan MSE dan PSNR
4 Button “Browse Stego Image” untuk membuka direktori dan memilih citra yang akan diekstraksi dan didekripsikan
5 Button “Simpan Teks” untuk memilih direktori tempat penyimpanan teks
6 Textbox untuk memasukkan password atau kunci rahasia
7 Picturebox untuk menampilkan citra yang telah dipilih
8 Label untuk menampilkan lamanya proses ekstrasi dan dekripsi
9 Button “Mulai” untuk melakukan proses ekstrasi dan dekripsi
10 Richtextbox untuk menampilkan hasil proses dekripsi/teks awal
3.3.3 Halaman Hitung MSE dan PSNR
Halaman Hitung MSE dan PSNR merupakan halaman yang berfungsi untuk melakukan perhitungan nilai MSE dan PSNR. Nilai MSE dan PSNR berfungsi untuk menunjukkan kualitas atau perbedaan dari dua buah citra. Rancangan halaman Hitung MSE dan PSNR dapat dilihat pada Gambar 3.18
(34)
Gambar 3.18 Rancangan Interface Halaman Hitung MSE dan PSNR Tabel 3.3 Keterangan Gambar Rancangan Interface Halaman Hitung MSE dan
PSNR
No Keterangan
1 Menu “Pengamanan” untuk menampilkan halaman proses enkripsi dan
embedding
2 Menu “Pengungkapan” untuk menampilkan halaman proses extracting dan dekripsi
3 Menu “Hitung MSE dan PSNR” untuk menampilkan halaman perhitungan MSE dan PSNR
4 Button “Browse Image” untuk membuka direktori dan memilih citra yang akan dibandingkan
5 Button “Hitung” untuk memulai proses perhitungan nilai MSE dan PSNR
6 Button “Browse Image” untuk membuka direktori dan memilih citra yang akan
7 Label untuk menampilkan nilai MSE
8 Picturebox untuk menampilkan citra yang telah dipilih
9 Label untuk menampilkan nilai PSNR
10 Picturebox untuk menampilkan citra yang telah dipilih
Pengamanan Pengungkapan Hitung MSE dan PSNR
Browse Image Browse Image
MSE : PSNR :
Boris Mario 121401066
1 3
4
8
7
6
9
10 2
Hitung
(35)
BAB 4
IMPLEMENTASI DAN PENGUJIAN
4.1. Implementasi
Setelah sistem dianalisis dan dirancang seperti yang telah diuraikan pada bab sebelumnya, tahap selanjutnya adalah mengimplementasikan sistem tersebut ke dalam bahasa pemrograman. Sistem ini dibangun dengan menggunakan Microsoft Visual Basic 2010. Pada sistem ini terdapat tiga halaman, yaitu : halaman Pengamanan, halaman Pengungkapan, halaman Hitung MSE dan PSNR.
4.1.1. Halaman Pengamanan
Halaman Pengamanan merupakan halaman yang pertama kali tampil pada saat sistem dijalankan. Tampilan halaman Pengamanan ini dapat dilihat pada Gambar 4.1.
(36)
Pada Gambar 4.1 terdapat 2 menu yang dapat memanggil halaman yang lain, yaitu: menu Pengungkapan, menu Hitung MSE dan PSNR. Pada halaman Pengamanan ini juga terdapat informasi tentang algoritma dan metode yang digunakan, serta terdapat juga nama dan nim dari penulis sendiri. Pada halaman ini user dapat melakukan proses enkripsi dan embedding dengan terlebih dahulu memasukkan file teks, cover
image, dan kunci rahasia. Kemudian, user harus menekan tombol “Mulai” untuk
melakukan proses enkripsi dan embedding. Hasil dari proses embedding dapat dilihat pada Picturebox di sebelah kanan.
4.1.2 Halaman Pengungkapan
Halaman Pengungkapan merupakan halaman yang ditampilkan jika user memilih menu “Pengungkapan”. Tampilan dari halaman Pengungkapan ini dapat dilihat pada Gambar 4.2.
Gambar 4.2 Halaman Pengungkapan
Gambar 4.1 menunjukkan bahwa user dapat melakukan proses ekstrasi dan dekripsi dengan terlebih dahulu memasukkan stego image, dan kunci rahasia. Kemudian, user
(37)
Universitas Sumatera Utara
dari proses dapat dilihat pada Richtextbox di sebelah kanan. Pada halaman ini juga akan ditampilkan lama eksekusi dari program.
4.1.3 Halaman Hitung MSE dan PSNR
Halaman Hitung MSE dan PSNR merupakan halaman yang ditampilkan jika
pengguna memilih menu “Hitung MSE dan PSNR”. Adapun tampilan dari halaman Hitung MSE dan PSNR ini dapat dilihat pada Gambar 4.3.
Gambar 4.3 Halaman Hitung MSE dan PSNR
Pada Gambar 4.3 user dapat melakukan pengecekan terhadap kualitas citra dengan melakukan proses perhitungan MSE dan PSNR. User harus terlebih dahulu
memasukkan citra – citra yang akan dibandingkan. Kemudian sistem akan
menampilkan hasilnya setelah tombol “Hitung” ditekan.
4.1.4 Implementasi Algoritma RC5
Pada bagian ini akan dijelaskan proses-proses yang terjadi dalam
mengimplementasikan algoritma RC5 pada proses enkripsi dan dekripsi. Sebelum melakukan enkripsi dan dekripsi harus terlebih dahulu dilakukan perluasan kunci (key
(38)
expanding) yang meliputi : pembentukan array L, pembentukan array S, dan
pencampuran array L dan S.
4.1.4.1. Proses Perluasan Kunci (Key Expanding)
Parameter yang digunakan pada penelitian adalah RC5 32/12/16 dengan plaintext
“Kripto Stegano” dan kunci rahasia “Kriptografi”. Berikut adalah proses perluasan kunci dari algoritma RC5 :
Plaintext : “Kripto Stegano“
Kunci rahasia : “Kriptografi” w (block size) = 32
r (round) = 12
b (key length) = 16 Keterangan :
w : ukuran blok enkripsi
r : jumlah putaran
b : panjang kunci rahasia
Plaintext dan kunci rahasia harus diubah ke dalam bentuk hexadecimal sehingga
bentuknya menjadi berikut ini :
Plaintext : 4B726970 746F2053 74656761 6E6F Kunci rahasia : 4B726970 746F6772 616669
Dikarenakan algoritma yang digunakan penulis menggunakan nilai w sebesar 32 bit dan nilai b sebesar 16 byte / 16 karakter maka plaintext dan kunci rahasia harus
di-padding agar sesuai dengan nilai yang telah ditetapkan. Berikut adalah bentuk plaintext dan kunci rahasia sesudah di-padding :
Plaintext : 4B726970 746F2053 74656761 6E6F0000 Kunci rahasia : 4B726970 746F6772 61666900 00000000
(39)
Universitas Sumatera Utara 4.1.4.1.1. Proses Pembentukan Array L
Pembentukan Array L merupakan tahap pertama dalam perluasan kunci RC5. Dengan menggunakan kunci rahasia yang telah di-padding maka berikutnya dilakukan proses perhitungan untuk mendapatkan array L[0,1..c-1] dengan algoritma :
Berikut adalah hasil perhitungan untuk mencari array L[0,1..c-1] : Dimana : b = 16, u = w/8 = 4 , c = b/u = 4.
L[i/4] = L[3] untuk i = 15, 14, 13 and 12. L[3] = (L[3] <<< 8) + K[15] = 00 + 00 = 00 L[3] = (L[3] <<< 8) + K[14] = 0000 + 00 = 0000 L[3] = (L[3] <<< 8) + K[13] = 000000 + 00 = 000000
L[3] = (L[3] <<< 8) + K[12] = 00000000 + 00 = 00000000
L[i/4] = L[2] untuk i = 11, 10, 9 and 8. L[2] = (L[2] <<< 8) + K[11] = 00 + 00 = 00 L[2] = (L[2] <<< 8) + K[10] = 0100 + 69 = 0069 L[2] = (L[2] <<< 8) + K[9] = 006900 + 66= 006966
L[2] = (L[2] <<< 8) + K[8] = 00696600 + 61 = 00696661
L[i/4] = L[1] untuk i = 7, 6, 5 and 4. L[1] = (L[1] <<< 8) + K[7] = 00 + 72= 72 L[1] = (L[1] <<< 8) + K[6] = 7200 + 67 = 7267 L[1] = (L[1] <<< 8) + K[5] = 726700 + 6F = 72676F
L[1] = (L[1] <<< 8) + K[4] = 72676F00 + 74 = 72676F74
L[i/4] = L[0] for i = 3, 2, 1 and 0.
L[0] = (L[0] <<< 8) + K[3] = 00 + 70 = 70 L[0] = (L[0] <<< 8) + K[2] = 7000 + 69 = 7069 L[0] = (L[0] <<< 8) + K[1] = 706900 + 72 = 706972
L[0] = (L[0] <<< 8) + K[0] = 70697200 + 4B = 7069724B
c = b/u;
for i = b – 1 downto 0 do
(40)
Tabel 4.1 Hasil Perhitungan Manual Array L[0,1..c-1]
L[0] L[1] L[2] L[3]
7069724B 72676F74 00696661 00000000
4.1.4.1.2. Proses Pembentukan Array S
Setelah proses pembentukan array L, maka proses selanjutnya adalah proses pembuatan array S. array S dibentuk dengan menggunakan algoritma sebagai berikut:
Dimana : t = 2*(r + 1) = 2 * (12+1) = 26, P32 = B7E15163, dan Q32 = 9E3779B9.
Nilai array S dapat dilihat pada tabel 4.2.
Tabel 4.2 Hasil Perhitungan Manual Array S[0,1..t-1]
n S[n]
1 B7E15163 + 9E3779B9 = 5618CB1C
2 5618CB1C + 9E3779B9 = F45044D5
3 F45044D5 + 9E3779B9 = 9287BE8E
4 9287BE8E + 9E3779B9 = 30BF3847
5 30BF3847 + 9E3779B9 = CEF6B200
6 CEF6B200 + 9E3779B9 = 6D2E2BB9
7 6D2E2BB9 + 9E3779B9 = 0B65A572
. . .
. . .
23 50A5C749 + 9E3779B9 = EEDD4102
24 EEDD4102 + 9E3779B9 = 8D14BABB
25 8D14BABB + 9E3779B9 = 2B4C3474
S[0] = P32;
For i = 1 to t-1 do
(41)
Universitas Sumatera Utara 4.1.4.1.3. Proses Pencampuran Array L dan S
Setelah dilakukan proses pembentukan array L dan array S, maka proses selanjutnya adalah mencampurkan kedua array tersebut dengan algoritma sebagai berikut :
Hasil pencampuran array L dengan array S dapat dilihat pada tabel 4.3.
Tabel 4.3 Hasil Pencampuran Array L Dengan Array S
A = S(0) = B7E15163 + 00000000 + 00000000 <<< 3 = BF0A8B1D
B = L(0) = 7069724B + BF0A8B1D + 00000000 <<< BF0A8B1D = 05EE7FAD A = S(1) = 5618CB1C + BF0A8B1D + 05EE7FAD <<< 3 = D88EAF30
B = L(1) = 72676F74 + D88EAF30 + 05EE7FAD <<< DE7D2EDD = 2A1C93CA A = S(2) = F45044D5 + D88EAF30 + 2A1C93CA <<< 3 = B7DC3E7F
B = L(2) = 00696661 + B7DC3E7F + 2A1C93CA <<< E1F8D249 = C47155C4 A = S(3) = 9287BE8E + B7DC3E7F + C47155C4 <<< 3 = 76AA9688
B = L(3) = 00000000 + 76AA9688 + C47155C4 <<< 13B1BEC4C = BEC4C3B1 A = S(4) = 30BF3847 + 76AA9688 + BEC4C3B1 <<< 3 = 31749403
B = L(0) = 05EE7FAD + 31749403 + BEC4C3B1 <<< F03957B4 = 761F627D A = S(5) = CEF6B200 + 31749403 + 761F627D <<< 3 = B4554403
. . .
A = S(24) = 8C4706A2 + DF020659 + 95223DAC <<< 3 = 035A5538
B = L(0) = F268D47E + 035A5538 + 95223DAC <<< 987C92E4 = AE567628 A = S(25) = F0735579 + 035A5538 + AE567628 <<< 3 = 112106CD
B = L(1) = 4239B824 + 112106CD + AE567628 <<< BF777CF5 = A3203626
4.1.4.2. Proses Enkripsi
Setelah tahap perluasan kunci selesai dilakukan, maka tahap selanjutnya adalah proses enkripsi. Proses enkripsi RC5 menggunakan algoritma sebagai berikut :
I =j = 0; A = B = 0;
do 3∗ max (t, c) times:
A = S[i] = (S[i] + A + B) <<< 3 B = L[j] = (L[j] + A + B) <<< (A + B); i = (i + 1) (mod t);
(42)
Plaintext : 4B726970 746F2053 74656761 6E6F0000
A B
Hasil dari enkripsi tahap 1 dapat dilihat pada tabel 4.4 berikut ini.
Tabel 4.4 Hasil Enkripsi Tahap 1
Round A B
0 DA679BFB D9198A23
1 9637A9A8 7E949194
2 4EC0DDA1 299ED426
3 9480BA56 A5AE1F76
4 85D3C225 693A5CD1
5 87E6EA1D 3F68CD4D
6 EE8E4741 71102837
7 B97D10EB AF86E0E9
8 FCDD5AC2 B8D000B5
9 27B29DB1 624CED95
10 E47A42C0 BEDA25AE
11 BEE07C1D 3F09518F
12 9A23962C BD9B411F
Plaintext : 4B726970 746F2053 74656761 6E6F0000
9A23962C BD9B411F A B
A = A + S[0]; B = B + S[1]; for i = 1 to r do
A = ((A ⊕ B) <<< B) + S[2i]; B = ((B ⊕ A) <<< A) + S[2i + 1];
(43)
Universitas Sumatera Utara
Hasil dari enkripsi tahap 2 dapat dilihat pada tabel 4.5 berikut ini.
Tabel 4.5 Hasil Enkripsi Tahap 2
Round A B
0 4C9073AA D90FD131
1 BF7E4627 893C9178
2 2A289645 2B772370
3 723359DC CF131F85
4 E1D041B3 4B302887
5 BA31AA9F 1A0DF780
6 C9E08D4F 8AAAFE14
7 33E1765B C38A56E8
8 701E0A85 DDECA5BE
9 C446C7D4 4EE54976
10 88942BD5 8D1C4485
11 5612CF75 5D1D682A
12 41F7D164 DFCC9BAE
Plaintext : 4B726970 746F2053 74656761 6E6F0000
9A23962C BD9B411F
41F7D164 DFCC9BAE A B
Hasil dari enkripsi tahap 3 dapat dilihat pada tabel 4.6 berikut ini.
Tabel 4.6 Hasil Enkripsi Tahap 3
Round A B
0 6EC1CE39 D31969D0
1 2230D8C0 419AB755
(44)
3 C4E89D35 5B4F5FB3
4 51FC73BA 7DA97F1D
5 2F87B1DE 7618EA24
6 C399EFD5 8B79C43E
7 D0654CAE 67E4116D
8 30B5CD85 559CB512
9 BB27B0AB 00717E45
10 4ACB60C9 ACE08EEE
11 A08EDEFF 65392E61
12 8ECA3675 13BE8530
Plaintext : 4B726970 746F2053 74656761 6E6F0000
9A23962C BD9B411F
41F7D164 DFCC9BAE 8ECA3675 13BE8530
Ciphertext : 9A23962C 41F7D164 8ECA3675 13BE8530
4.1.4.3. Proses Dekripsi
Proses Dekripsi adalah proses untuk mengembalikan ciphertext menjadi plaintext. Proses dekripsi RC5 menggunakan algoritma sebagai berikut :
Ciphertext : 9A23962C 41F7D164 8ECA3675 13BE8530 A B
For i = r down to 1 do
B = B − S i + >>> A ⊕ A; A = A − S i >>> B ⊕ B; B = B − S ;
(45)
Universitas Sumatera Utara
Hasil dari dekripsi tahap 1 dapat dilihat pada tabel 4.7 berikut ini.
Tabel 4.7 Hasil Dekripsi Tahap 1
Round A B
12 A08EDEFF 65392E61
11 4ACB60C9 ACE08EEE
10 BB27B0AB 00717E45
9 30B5CD85 559CB512
8 D0654CAE 67E4116D
7 C399EFD5 8B79C43E
6 2F87B1DE 7618EA24
5 51FC73BA 7DA97F1D
4 C4E89D35 5B4F5FB3
3 BD9EC8BB 40D65FBB
2 2230D8C0 419AB755
1 6EC1CE39 D31969D0
0 DFCC9BAE 6E6F0000
Ciphertext : 9A23962C 41F7D164 8ECA3675 13BE8530 DFCC9BAE 6E6F0000
A B
Hasil dari dekripsi tahap 2 dapat dilihat pada tabel 4.8 berikut ini.
Tabel 4.8 Hasil Dekripsi Tahap 2
Round A B
12 5612CF75 5D1D682A
11 88942BD5 8D1C4485
(46)
9 701E0A85 DDECA5BE
8 33E1765B C38A56E8
7 C9E08D4F 8AAAFE14
6 BA31AA9F 1A0DF780
5 E1D041B3 4B302887
4 723359DC CF131F85
3 2A289645 2B772370
2 BF7E4627 893C9178
1 4C9073AA D90FD131
0 BD9B411F 74656761
Ciphertext : 9A23962C 41F7D164 8ECA3675 13BE8530 DFCC9BAE 6E6F0000
BD9B411F 74656761
A B
Hasil dari dekripsi tahap 3 dapat dilihat pada tabel 4.9 berikut ini.
Tabel 4.9 Hasil Dekripsi Tahap 3
Round A B
12 BEE07C1D 3F09518F
11 E47A42C0 BEDA25AE
10 27B29DB1 624CED95
9 FCDD5AC2 B8D000B5
8 B97D10EB AF86E0E9
7 EE8E4741 71102837
6 87E6EA1D 3F68CD4D
5 85D3C225 693A5CD1
(47)
Universitas Sumatera Utara
3 4EC0DDA1 299ED426
2 9637A9A8 7E949194
1 DA679BFB D9198A23
0 4B726970 746F2053
Ciphertext : 9A23962C 41F7D164 8ECA3675 13BE8530 DFCC9BAE 6E6F0000
BD9B411F 74656761
4B726970 746F2053
Plaintext : 4B726970 746F2053 74656761 6E6F0000
Dengan mengubah hexadecimal menjadi karakter maka didapatkan kembali teks awal yaitu,
Plaintext : “Kripto Stegano”
4.1.5. Implementasi Metode LSB
Pada bagian ini akan dijelaskan proses menyisipkan ciphertext ke dalam cover image kemudian proses mengungkapkan kembali ciphertext tersebut dari stego image. Cover
image yang akan digunakan berukuran 100 x 100 pixel. Berikut adalah cover image
yang akan digunakan.
Gambar 4.4 Cover Image 100 x 100 Pixel
4.1.5.1. Proses Penyisipan
Proses Penyisipan adalah proses menyisipkan ciphertext hasil dari enkripsi RC5 ke dalam cover image dengan cara mengacak terlebih dahulu pixel yang akan disisipi dengan algoritma random Linear Congruential Generator (LCG). Dengan mengubah
ciphertext yang telah didapatkan sebelumnya menjadi stream bit maka ciphertext
(48)
Ciphertext : 00111001 01000001 00110010 00110011 00111001 00110110
00110010 01000011 00110100 00110001 01000110 00110111 01000100 00110001 00110110 00110100 00111000 01000101 01000011 01000001 00110011 00110110 00110111 00110101 00110001 00110011 01000010 01000101 00111000 00110101 00110011 00110000
Setelah mengubah ciphertext menjadi stream bit, maka proses selanjutnya adalah
menyisipkan masing-masing bit tersebut ke dalam pixel yang telah diacak
menggunakan algoritma LCG ke dalam cover image. Hasil penyisipan ciphertext ke dalam cover image dapat dilihat pada tabel 4.10.
Tabel 4.10 Hasil Penyisipan Ciphertext ke dalam Cover image Posisi
pixel
Sebelum Disisipkan Bit yang disisipkan
Sesudah Disisipkan
R G B R G B
(60,0) 63 63 63 001 62 62 63
(95,0) 0 0 0 110 1 1 0
(30,1) 64 64 64 010 64 65 64
(81,1) 64 64 64 100 65 64 64
(12,0) 0 0 0 000 0 0 0
(94,0) 0 0 0 100 1 0 0
(99,1) 0 0 0 110 1 1 0
(43,1) 64 64 64 010 64 65 64
. . . . . . . . . . . . . . . . . . . . . . . .
(16,0) 52 52 52 011 52 53 53
(11,1) 12 12 12 000 12 12 12
(45,1) 64 64 64 0 64 64 64
Untuk mengetahui berapa panjang bit yang harus diektraksi, maka dilakukan penanda dengan memasukkan panjang ciphertext ke dalam pixel terakhir di layer B cover
image. Pada kasus ini, maka panjang ciphertext yang harus dimasukkan sebagai
(49)
Universitas Sumatera Utara Ciphertext : 9A23962C41F7D1648ECA367513BE8530
Panjang ciphertext : 32
Panjang ciphertext dalam bit : 00100000
Untuk mengetahui berapa panjang ciphertext dalam bit yang harus diambil maka
harus dipadding dengan nilai “0” sebagai pembatas dan nilai “1” sepanjang panjang ciphertext dalam bit, sehingga penandanya menjadi seperti berikut :
Penanda : 00100000011111111
Proses penyisipan penanda kedalam cover image layer B dapat dilihat pada tabel 4.11.
Tabel 4.11 Proses Penyisipan Penanda ke dalam Cover image Posisi
pixel
Sebelum Disisipkan Bit yang disisipkan
Sesudah Disisipkan
B B
(83,99) 0 0 0
(84,99) 0 0 0
(85,99) 0 1 1
(86,99) 0 0 0
(87,99) 0 0 0
(88,99) 0 0 0
(89,99) 0 0 0
(90,99) 0 0 0
(91,99) 0 0 0
(92,99) 0 1 1
(93,99) 0 1 1
(94,99) 0 1 1
(95,99) 0 1 1
(96,99) 0 1 1
(97,99) 0 1 1
(98,99) 0 1 1
(50)
4.1.5.2. Proses Ekstraksi
Proses Ekstraksi adalah proses pengambilan kembali nilai-nilai bit yang telah disisipkan dan disatukan kembali menjadi suatu ciphertext. Terlebih dahulu, sistem harus mengekstraksi penanda untuk mengetahui panjang ciphertext yang akan diekstraksi nantinya. Kemudian, sistem dapat mengambil kembali ciphertext yang telah disisipkan.. Berikut proses pengambilan penandanya :
1. Sistem membaca dari pixel terakhir layer B secara berurutan dan mengambil
bit terakhir dari pixel tersebut hingga sistem menemukan nilai “0”.
Contoh :
(99,99) mempunyai bit terakhir “1” (98,99) mempunyai bit terakhir “1” (97,99) mempunyai bit terakhir “1” (96,99) mempunyai bit terakhir “1” (95,99) mempunyai bit terakhir “1” (94,99) mempunyai bit terakhir “1” (93,99) mempunyai bit terakhir “1” (92,99) mempunyai bit terakhir “1” (91,99) mempunyai bit terakhir “0”
2. Ketika sistem sudah menemukan nilai “0” maka sistem dapat mengetahui
berapa panjang yang harus diambil selanjutnya sesuai dengan banyaknya nilai
“1” yang terambil . Pada contoh diatas sistem harus mengambil 8 bit lagi. (90,99) mempunyai bit terakhir “0”
(89,99) mempunyai bit terakhir “0” (88,99) mempunyai bit terakhir “0” (87,99) mempunyai bit terakhir “0” (86,99) mempunyai bit terakhir “0” (85,99) mempunyai bit terakhir “1” (84,99) mempunyai bit terakhir “0” (83,99) mempunyai bit terakhir “0”
3. Nilai-nilai tersebut akan digabung sehingga menjadi “00100000” sehingga didapatkan lah panjang ciphertext = 32.
(51)
Universitas Sumatera Utara
Setelah dilakukan pengambilan penanda langkah selanjutnya adalah membangkitkan algoritma random LCG untuk mendapatkan posisi pixel yang akan diekstraksi. Proses ekstraksi ciphertext dapat pada tabel 4.12.
Tabel 4.12 Proses Ekstraksi Ciphertext Posisi
pixel
Bit yang disisipkan
R G B
(60,0) 62 62 63 001
(95,0) 1 1 0 110
(30,1) 64 65 64 010
(81,1) 65 64 64 100
(12,0) 0 0 0 000
(94,0) 0 0 0 100
(99,1) 1 0 0 110
(43,1) 64 65 64 010
. . .
. . .
. . .
. . .
. . .
(16,0) 52 53 53 011
(11,1) 12 12 12 000
(45,1) 64 64 64 0
Pada tabel 4.12, didapatkan ciphertext sebagai berikut :
Ciphertext : 00111001 01000001 00110010 00110011 00111001 00110110
00110010 01000011 00110100 00110001 01000110 00110111 01000100 00110001 00110110 00110100 00111000 01000101 01000011 01000001 00110011 00110110 00110111 00110101 00110001 00110011 01000010 01000101 00111000 00110101 00110011 00110000
Selanjutnya ciphertext tersebut diubah kedalam bentuk karakter sehingga menjadi seperti berikut :
(52)
4.2. Pengujian
Pengujian ini bertujuan untuk menguji komponen sistem yang telah dirancang sebelumnya dan untuk memastikan bahwa setiap elemen dari sistem telah berfungsi sesuai dengan yang diharapkan. Dalam pengujian perangkat lunak ini menggunakan metode Black Box yaitu yang berfokus pada persyaratan atau kebutuhan fungsional perangkat lunak yang dibuat.
4.2.1. Pengujian Black Box
Pengujian black box berfokus pada persyaratan fungsional aplikasi. Pengujian ini memungkinkan analisis sistem memperoleh kumpulan kondisi input yang akan mengerjakan seluruh keperluan fungsional aplikasi. Pengujian Black Box akan dilakukan pada masing-masing halaman yaitu pada halaman Pengamanan, halaman Pengungkapan, dan halaman Hitung MSE dan PSNR.
4.2.1.1. Pengujian Halaman Pengamanan
Pengujian black box pada halaman pengamanan berguna untuk mengetahui apakah aplikasi telah mampu mengamankan teks dan mampu mengatasi error-error akibat kotak isian yang kosong dan lain sebagainya. Hasil pengujian black box pada halaman pengamanan dapat dilihat pada tabel 4.13.
Tabel 4.13 Pengujian Halaman Pengamanan
No Skenario Pengujian
Hasil Yang Diharapkan
Hasil Pengujian Kesimpulan
1 Input file teks berformat *.docx, *.doc, *.txt, dan *.rtf.
Sistem menampilkan isi file teks ke Richtextbox dan Panjang Teks
(53)
Universitas Sumatera Utara 2 Input citra
berformat *.bmp, *.jpeg, *.jpg dan *.png. Sistem menampilkan citra ke dalam PictureBox dengan panjang dan lebar citra
Diterima
3 Password
Tidak Diinput Sistem menampilkan kotak pesan Pass ord Harus Diisi Diterima
4 Teks atau Citra belum diinput pada halaman pengaman an Sistem menampilkan Kotak pesan teks atau gambar belu ada
Diterima
5 Cover
Image tidak mampu menampu ng teks yang disisipkan Sistem akan menampilkan kotak pesan
Co er I age kura g besar
(54)
6 User menekan tombol
Mulai
Sistem akan menampilkan kotak pesan
Proses selesai , Lama Eksekusi dan Stego image
Diterima
4.2.1.2. Pengujian Halaman Pengungkapan
Pengujian black box pada halaman pengungkapan berguna untuk mengetahui apakah aplikasi telah mampu mengungkapkan dan mengembalikan ke teks awal, serta mampu mengatasi error-error akibat kotak isian yang kosong dan lain sebagainya. Hasil pengujian black box pada halaman Pengungkapan dapat dilihat pada tabel 4.14.
Tabel 4.14 Pengujian Halaman Pengungkapan
No Skenario Pengujian
Hasil Yang Diharapkan
Hasil Pengujian Kesimpulan
1 User menekan tombol
Mulai
Sistem akan menampilkan kotak pesan
Proses selesai , Lama eksekusi dan Teks awal
Diterima
2 Password
tidak diisi
Sistem akan menampilkan kotak pesan
Password Belum Diisi
(1)
vi
ABSTRAK
Keamanan data sudah menjadi hal yang sangat penting pada era teknologi ini. Hal tersebut diperlukan untuk mengatasi interupsi, penyadapan ataupun modifikasi pesan yang dilakukan oleh pihak-pihak yang tidak bertanggung jawab. Tanpa adanya jaminan keamanan data dan kerahasiaan data, orang lain dapat dengan mudah mendapatkan pesan/informasi melalui jaringan internet. Pada penelitian ini, masalah yang akan diangkat adalah pengamanan file teks dengan menggabungkan algoritma kriptografi RC5 dan metode steganografi Least Significant Bit (LSB). Aplikasi dibangun menggunakan bahasa pemrograman Visual Basic. Hasil penelitian menunjukkan bahwa RC5 dan LSB dapat dikombinasikan dengan baik sehingga dapat memberikan pengamanan terhadap file teks yang dimasukkan. Hasil penelitian juga menunjukkan bahwa metode LSB tidak menurunkan kualitas citra sama sekali karena mempunyai nilai PSNR lebih dari 30 dB
(2)
vii
IMPLEMENTATION OF RC5 CRYPTOGRAPHY ALGORITHM AND LEAST SIGNIFICANT BIT (LSB) STEGANOGRAPHY
METHOD IN SECURING TEXT FILE
ABSTRACT
Data security has been the most important thing in this technology era. It is needed to overcome interruption, tapping or any kind of message modification that is done by unresponsible parties. Without any data security guarantee and data confidentiality, other party can easily acquire message/information through internet network. In this research, the issues studied is securing text file by combining RC5 cryptography algorithm and Least Significant Bit (LSB) steganography method. The system will be built using Visual Basic programming language. Result of the test shows that RC5 and LSB can be combined very well in securing text file. Result of the test also shows that LSB method does not degrade the quality of the image at all because the PSNR value is over 30 dB.
Keywords : Cryptography, Steganography, RC5, Least Significant Bit, LSB.
(3)
viii
DAFTAR ISI
Hal.
Persetujuan ii
Pernyataan iii
Penghargaan iv
Abstrak vi
Abstract vii
Daftar Isi viii
Daftar Tabel x
Daftar Gambar xi
Bab 1 Pendahuluan
1.1 Latar Belakang 1
1.2 Rumusan Masalah 2
1.3 Batasan Masalah 2
1.4 Tujuan Penelitian 3
1.5 Manfaat Penelitian 3
1.6 Metodologi Penelitian 4
1.7 Sistematika Penulisan 5
Bab 2 Landasan Teori
2.1 Algoritma 6
2.2 Kriptografi 6
2.2.1 Algoritma RC5 7
2.2.1.1 Key Expansion Algorithm 7
2.2.1.2 Encryption Algorithm 9
2.2.1.3 Decryption Algorithm 9
2.3 Steganografi 10
2.3.1 Metode Least Significant Bit (LSB) 10
2.4 Citra 11
2.5 Penelitian yang Relevan 11
Bab 3 Analisis dan Perancangan
3.1 Analisis Sistem 13
3.1.1 Analisis Masalah 13
3.1.2 Analisis Persyaratan 14
3.1.2.1 Persyaratan Fungsional 15 3.1.2.2 Persyaratan Non-fungsional 15
3.1.3 Analisis Proses 16
3.2 Perancangan Sistem 16
3.2.1 Use Case Diagram 17
3.2.2 Activity Diagram 17
(4)
ix
3.2.4.1 Flowchart Sistem 22 3.2.4.2 Flowchart Enkripsi RC5 23 3.2.4.3 Flowchart Dekripsi RC5 24 3.2.4.4 Flowchart Embedding Teks ke Cover Image 25 3.2.4.5 Flowchart Extracting Teks dari Stego Image 26 3.2.4.6 Flowchart Perhitungan MSE dan PSNR 27
3.2.5 Pseudocode 27
3.2.5.1 Pseudocode Enkripsi RC5 28 3.2.5.2 Pseudocode Dekripsi RC5 28 3.2.5.3 Pseudocode Hitung MSE dan PSNR 28 3.3 Perancangan Antarmuka (Interface) 28
3.3.1 Halaman Pengamanan 29
3.3.2 Halaman Pengungkapan 30
3.3.3 Halaman Hitung MSE dan PSNR 31
Bab 4 Implementasi dan Pengujian
4.1 Implementasi 33
4.1.1 Halaman Pengamanan 33
4.1.2 Halaman Pengungkapan 34
4.1.3 Halaman Hitung MSE dan PSNR 35
4.1.4 Implementasi Algoritma RC5 35
4.1.4.1 Proses Perluasan Kunci (Key Expanding) 36 4.1.4.1.1 Proses Pembentukan Array L 37 4.1.4.1.2 Proses Pembentukan Array S 38 4.1.4.1.3 Proses Pencampuran Array L dan S 39
4.1.4.2 Proses Enkripsi 39
4.1.4.3 Proses Dekripsi 42
4.1.5 Implementasi Metode LSB 45
4.1.5.1 Proses Penyisipan 45
4.1.5.2 Proses Ekstraksi 48
4.2 Pengujian 50
4.2.1 Pengujian Black Box 50 4.2.1.1 Pengujian Halaman Pengamanan 50 4.2.1.2 Pengujian Halaman Pengungkapan 52 4.2.1.3 Pengujian Halaman Hitung MSE dan PSNR 53 Bab 5 Kesimpulan dan Saran
5.1 Kesimpulan 55
5.2 Saran 55
Daftar Pustaka 56
Listing Program A-1
Curriculum Vitae B-1
(5)
x
DAFTAR TABEL
Hal.
TABEL 2.1. Nilai Pw dan Qw 8
TABEL 3.1. Keterangan Gambar Rancangan Interface Halaman Pengamanan 29 TABEL 3.2. Keterangan Gambar Rancangan Interface Halaman Pengungkapan 31
TABEL 3.3. Keterangan Gambar Rancangan Interface Halaman Hitung
MSE dan PSNR 32
TABEL 4.1. Hasil Perhitungan Manual Array L[0,1..c-1] 38 TABEL 4.2. Hasil Perhitungan Manual Array S[0,1..t-1] 38 TABEL 4.3. Hasil Pencampuran Array L dengan Array S 39
TABEL 4.4. Hasil Enkripsi Tahap 1 40
TABEL 4.5. Hasil Enkripsi Tahap 2 41
TABEL 4.6. Hasil Enkripsi Tahap 3 41
TABEL 4.7. Hasil Dekripsi Tahap 1 43
TABEL 4.8. Hasil Dekripsi Tahap 2 43
TABEL 4.9. Hasil Dekripsi Tahap 3 44
TABEL 4.10. Hasil Penyisipan Ciphertext ke dalam Cover image 46 TABEL 4.11. Proses Penyisipan Penanda ke dalam Cover image 47
TABEL 4.12. Proses Ekstraksi Ciphertext 49
TABEL 4.13. Pengujian Halaman Pengamanan 50
TABEL 4.14. Pengujian Halaman Pengungkapan 52
(6)
xi
DAFTAR GAMBAR
Hal. GAMBAR 2.1. Skema Proses Enkripsi dan Dekripsi 7 GAMBAR 3.1. Diagram Ishikawa Masalah Penelitian 14
GAMBAR 3.2. Use Case Diagram 17
GAMBAR 3.3. Activity Diagram Pengamanan 18
GAMBAR 3.4. Activity Diagram Pengungkapan 19
GAMBAR 3.5. Activity Diagram Hitung MSE dan PSNR 20
GAMBAR 3.6. Sequence Diagram Sistem 21
GAMBAR 3.7. Flowchart Sistem 22
GAMBAR 3.8. Flowchart Enkripsi RC5 23
GAMBAR 3.9. Flowchart Dekripsi RC5 24
GAMBAR 3.10. Flowchart Embedding Teks Ke Cover Image 25 GAMBAR 3.11. Flowchart Exctracting Teks Dari Stego Image 26 GAMBAR 3.12. Flowchart Perhitungan MSE dan PSNR 27
GAMBAR 3.13. Pseudocode Enkripsi RC5 28
GAMBAR 3.14. Pseudocode Dekripsi RC5 28
GAMBAR 3.15. Pseudocode Hitung MSE dan PSNR 28 GAMBAR 3.16. Rancangan Interface Halaman Pengamanan 29 GAMBAR 3.17. Rancangan Interface Halaman Pengungkapan 30 GAMBAR 3.18. Rancangan Interface Halaman Hitung MSE dan PSNR 32
GAMBAR 4.1. Halaman Pengamanan 33
GAMBAR 4.2. Halaman Pengungkapan 34
GAMBAR 4.3. Halaman Hitung MSE dan PSNR 35
GAMBAR 4.4. Cover Image 100 x 100 Pixel 45