Analisis dan Implementasi Algoritma Kriptografi Playfair Cipher dan Algoritma Kompresi Run Length Encoding Dalam Pengamanan dan Kompresi Data Teks

A-1

LISTING PROGRAM

1. Form Home.vb
Public Class Form1
Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)
End Sub
Private Sub AlgoritmaToolStripMenuItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
AlgoritmaToolStripMenuItem.Click
Form2.Show()
End Sub
Private Sub MenuToolStripMenuItem_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MenuToolStripMenuItem.Click
End Sub
Private Sub EnkripsiKompresiToolStripMenuItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
EnkripsiKompresiToolStripMenuItem.Click
Form3.Show()

End Sub
Private Sub DekripsiDekompresiToolStripMenuItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
DekripsiDekompresiToolStripMenuItem.Click
Form4.Show()
End Sub
Private Sub TentangToolStripMenuItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
TentangToolStripMenuItem.Click
Form5.Show()
End Sub
Private Sub BerandaToolStripMenuItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
End Sub
Private Sub KompresiEnkripsiToolStripMenuItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
KompresiEnkripsiToolStripMenuItem.Click

Form6.Show()
End Sub

Universitas Sumatera Utara

A-2
A-2

Private Sub DekripsiDekompresiToolStripMenuItem1_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
DekripsiDekompresiToolStripMenuItem1.Click
Form7.Show()
End Sub
End Class

2. Form Enkripsi-Kompresi .vb
Imports System.IO
Imports Microsoft.Office.Interop.Word
Public Class Form3
Dim strFileName As String

Dim cipher As String = ""
Dim alpabet As Char() = New Char(94) {}
Dim ab As Integer = 0
Dim plain As String = ""
Dim waktu_proses As New Stopwatch
Public Const EOF As Char = ChrW(127)
Public Const ESCAPE As Char = ChrW(165)
'
Private Function cekKunci(ByVal huruf As Char) As Boolean
For i As Integer = 0 To ab - 1
If alpabet(i) = huruf Then
Return False
End If
Next
alpabet(ab) = huruf
ab += 1
Return True
End Function

Private Sub

Dim
Dim
For

putarKunci1(ByVal matrix As Char(,),
limit As Boolean = False
temp As Char = " "c
i As Integer = 0 To 18
For j As Integer = 0 To 4
If matrix(i, j) = huruf Then
If j = 4 AndAlso i = 18 Then
temp = matrix(i, j)
matrix(i, j) = matrix(0,
matrix(0, j) = matrix(0,
matrix(0, 0) = matrix(i,
matrix(i, 0) = temp
limit = True
Exit For
ElseIf i = 18 Then
temp = matrix(i, j)


ByVal huruf As Char)

j)
0)
0)

Universitas Sumatera Utara

A-3

matrix(i, j) = matrix(0, j)
matrix(0, j) = matrix(0, j + 1)
matrix(0, j + 1) = matrix(i, j +
matrix(i, j + 1) = temp
limit = True
Exit For
ElseIf j = 4 Then
temp = matrix(i, j)
matrix(i, j) = matrix(i + 1, j)

matrix(i + 1, j) = matrix(i + 1,
matrix(i + 1, 0) = matrix(i, 0)
matrix(i, 0) = temp
limit = True
Exit For
Else
temp = matrix(i, j)
matrix(i, j) = matrix(i + 1, j)
matrix(i + 1, j) = matrix(i + 1,
matrix(i + 1, j + 1) = matrix(i,
matrix(i, j + 1) = temp
limit = True
Exit For
End If
End If
Next
If limit Then
Exit For
End If


1)

0)

j + 1)
j + 1)

Next
End Sub
Private Sub
Dim
Dim
For

putarKunci2(ByVal matrix As Char(,), ByVal huruf As Char)
limit As Boolean = False
temp As Char = " "c
i As Integer = 0 To 18
For j As Integer = 0 To 4
If matrix(i, j) = huruf Then

If i = 18 AndAlso j = 4 Then
temp = matrix(i, j)
matrix(i, j) = matrix(i, 0)
matrix(i, 0) = matrix(0, 0)
matrix(0, 0) = matrix(0, j)
matrix(0, j) = temp
limit = True
Exit For
ElseIf i = 18 Then
temp = matrix(i, j)
matrix(i, j) = matrix(i, j + 1)
matrix(i, j + 1) = matrix(0, j + 1)
matrix(0, j + 1) = matrix(0, j)
matrix(0, j) = temp
limit = True
Exit For

Universitas Sumatera Utara

Universitas Sumatera Utara


A-4

ElseIf j = 4 Then
temp = matrix(i, j)
matrix(i, j) = matrix(i, 0)
matrix(i, 0) = matrix(i + 1, 0)
matrix(i + 1, 0) = matrix(i + 1, j)
matrix(i + 1, j) = temp
limit = True
Exit For
Else
temp = matrix(i, j)
matrix(i, j) = matrix(i, j + 1)
matrix(i, j + 1) = matrix(i + 1, j + 1)
matrix(i + 1, j + 1) = matrix(i + 1, j)
matrix(i + 1, j) = temp
limit = True
Exit For
End If

End If
Next
If limit Then
Exit For
End If
Next
End Sub

Private Sub
Dim
Dim
Dim
For

enkripsi(ByVal bigram As String, ByVal Matrik As Char(,))
limit As Boolean = False
bigramx As Integer() = New Integer(1) {}
bigramy As Integer() = New Integer(1) {}
x As Integer = 0 To 1
For i As Integer = 0 To 18

For j As Integer = 0 To 4
If bigram(x) = Matrik(i, j) Then
bigramx(x) = i
bigramy(x) = j
limit = True
If limit = True AndAlso x = 2 Then
Exit For
End If
End If
Next
If limit = True AndAlso x = 2 Then
Exit For
End If
Next

Next
If bigramx(0) = bigramx(1) Then
If bigramy(0) = 4 Then
cipher += Matrik(bigramx(0), 0).ToString() +
Matrik(bigramx(1), bigramy(1) + 1).ToString()
ElseIf bigramy(1) = 4 Then

Universitas Sumatera Utara

Universitas Sumatera Utara

A-5

cipher += Matrik(bigramx(0), bigramy(0) + 1).ToString()
+ Matrik(bigramx(1), 0).ToString()
Else
cipher += Matrik(bigramx(0), bigramy(0) + 1).ToString()
+ Matrik(bigramx(1), bigramy(1) + 1).ToString()
End If
ElseIf bigramy(0) = bigramy(1) Then
If bigramx(0) = 18 Then
cipher += Matrik(0, bigramy(0)).ToString() +
Matrik(bigramx(1) + 1, bigramy(1)).ToString()
ElseIf bigramx(1) = 18 Then
cipher += Matrik(bigramx(0) + 1, bigramy(0)).ToString()
+ Matrik(0, bigramy(1)).ToString()
Else
cipher += Matrik(bigramx(0) + 1, bigramy(0)).ToString()
+ Matrik(bigramx(1) + 1, bigramy(1)).ToString()
End If
Else
cipher += Matrik(bigramx(0), bigramy(1)).ToString() +
Matrik(bigramx(1), bigramy(0)).ToString()
End If
TextBox3.Text = cipher
End Sub

Private Sub cari_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles cari.Click
Dim AmbilFile As New OpenFileDialog
Dim objFSO As New Scripting.FileSystemObject
Dim objFile As Scripting.File
objFSO = New Scripting.FileSystemObject
AmbilFile.CheckFileExists = True
AmbilFile.CheckPathExists = True
AmbilFile.DefaultExt = "txt"
AmbilFile.Filter =
"Documen(*.doc)|*.doc|document(*.docx)|*.docx|TXT File (*.txt)|*.txt|All
Files (*.*)|*.*"
AmbilFile.Multiselect = False
AmbilFile.ShowDialog()
strFileName = AmbilFile.FileName
Textcari.Text = strFileName
Dim app As Application = New Application
Dim doc As Document = app.Documents.Add(strFileName) '
Dim co As Integer = doc.Characters.Count
For i As Integer = 1 To co - 1
Dim tex As String = doc.Characters(i).Text
TextBox1.Text += tex
Next
TextBox9.Text = TextBox1.TextLength
objFile = objFSO.GetFile(strFileName)
TextBox7.Text = objFile.Size & "bytes"
End Sub

Universitas Sumatera Utara

Universitas Sumatera Utara

A-6

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim kunci As String = TextBox2.Text
Dim PKunci As Integer = kunci.Length
Dim a As Integer = 0, asci As Integer = 32
Dim Matrik As Char(,) = New Char(18, 4) {}
waktu_proses.Start()
For i As Integer = 0 To 18
For j As Integer = 0 To 4
If a < PKunci Then
If cekKunci(kunci(a)) = True Then
Matrik(i, j) = kunci(a)
Else
j -= 1
End If
a += 1
Else
If cekKunci(ChrW(asci)) = True Then
Matrik(i, j) = ChrW(asci)
Else
j -= 1
End If
asci += 1
End If
Next
Next
Dim plain As String = TextBox1.Text
Dim bigram As String = ""
If plain.Length Mod 2 0 Then
plain += "x"
End If
Dim x As Integer = 0
bigram = plain.Substring(x, 2)
x += 2
enkripsi(bigram, Matrik)
For i As Integer = 0 To plain.Length - 3
If i Mod 2 = 0 Then
putarKunci1(Matrik, plain(i))
Else
putarKunci2(Matrik, plain(i))
bigram = plain.Substring(x, 2)
x += 2
enkripsi(bigram, Matrik)
End If
Next
waktu_proses.Stop()
TextBox6.Text = waktu_proses.Elapsed.TotalSeconds.ToString()
waktu_proses.Reset()
End Sub
Private Sub hapus_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles hapus.Click
TextBox1.Text = ""

Universitas Sumatera Utara

Universitas Sumatera Utara

A-7

Textcari.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
MsgBox("Data telah dihapus", MsgBoxStyle.Exclamation,
"Perhatian")
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
Dim i As Integer = FreeFile()
FileOpen(i, "D:\KULIAH\hasil.txt", OpenMode.Output)
PrintLine(i, TextBox3.Text)
FileClose(i)
MsgBox("Data telah disimpan", MsgBoxStyle.Information,
"Perhatian")
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button5.Click
Dim i As Integer = FreeFile()
FileOpen(i, "D:\KULIAH\finish.txt", OpenMode.Output)
PrintLine(i, TextBox4.Text)
FileClose(i)
MsgBox("Data telah disimpan", MsgBoxStyle.Information,
"Perhatian")
End Sub
Public Shared Function RunLengthEncode(ByVal s As String) As String
Dim srle As String = String.Empty
Dim ccnt As Integer = 1
'char counter
For i As Integer = 0 To s.Length - 2
If s(i) s(i + 1) OrElse i = s.Length - 2 Then
'..a break in character repetition or the end of the
string
If s(i) = s(i + 1) AndAlso i = s.Length - 2 Then
'end of string condition
ccnt += 1
End If
If ccnt = 1 Then
srle += (If("1234567890".Contains(s(i).ToString()),
"" + ESCAPE, "")) + s(i)
Else
'escape digits
srle += ccnt.ToString() +
(If("1234567890".Contains(s(i).ToString()), "" + ESCAPE, "")) + s(i)
End If
'escape digits
If s(i) s(i + 1) AndAlso i = s.Length - 2 Then
'end of string condition
srle += (If("1234567890".Contains(s(i +
1).ToString()), "1" + ESCAPE, "")) + s(i + 1)

Universitas Sumatera Utara

Universitas Sumatera Utara

A-8

End If
'reset char repetition counter
ccnt = 1
Else
ccnt += 1
End If
Next
Return srle
End Function
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
waktu_proses.Start()
TextBox4.Text = RunLengthEncode(TextBox3.Text)
TextBox10.Text = TextBox4.Text.Count()
waktu_proses.Stop()
TextBox5.Text = waktu_proses.Elapsed.TotalSeconds.ToString()
waktu_proses.Reset()
End Sub
End Class

3. Form Dekompresi-Dekripsi .vb
Imports System.IO
Imports Microsoft.Office.Interop.Word
Public Class Form4
Dim strFileName As String
Dim plain As String = ""
Dim alpabet As Char() = New Char(94) {}
Dim ab As Integer = 0
Dim waktu_proses As New Stopwatch
Public Const EOF As Char = ChrW(127)
Public Const ESCAPE As Char = ChrW(165)
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles TextBox1.TextChanged
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim AmbilFile As New OpenFileDialog
Dim strFileName As String
Dim objFSO As New Scripting.FileSystemObject
Dim objFile As Scripting.File
objFSO = New Scripting.FileSystemObject
AmbilFile.CheckFileExists = True
AmbilFile.CheckPathExists = True
AmbilFile.DefaultExt = "txt"
AmbilFile.Filter =
"Documen(*.doc)|*.doc|document(*.docx)|*.docx|TXT File (*.txt)|*.txt|All
Files (*.*)|*.*"

Universitas Sumatera Utara

Universitas Sumatera Utara

A-9

AmbilFile.Title = "Pilih TXT, doc File aja, jangan yg lain"
AmbilFile.Multiselect = False
AmbilFile.ShowDialog()
strFileName = AmbilFile.FileName
Textcari.Text = strFileName
Dim app As Application = New Application
Dim doc As Document = app.Documents.Add(strFileName)
Dim co As Integer = doc.Characters.Count
For i As Integer = 1 To co - 1
Dim tex As String = doc.Characters(i).Text
TextBox1.Text += tex
Next
TextBox6.Text = TextBox1.TextLength
objFile = objFSO.GetFile(strFileName)
TextBox7.Text = objFile.Size & "bytes"
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button5.Click
Dim i As Integer = FreeFile()
FileOpen(i, "D:\KULIAH\hasil.txt", OpenMode.Output)
PrintLine(i, TextBox4.Text)
FileClose(i)
MsgBox("Data telah disimpan", MsgBoxStyle.Information,
"Perhatian")
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
Dim i As Integer = FreeFile()
FileOpen(i, "D:\KULIAH\hasil.txt", OpenMode.Output)
PrintLine(i, TextBox3.Text)
FileClose(i)
MsgBox("Data telah disimpan", MsgBoxStyle.Information,
"Perhatian")
End Sub
Public Shared Function RunLengthDecode(ByVal s As String) As String
Dim dsrle As String = String.Empty, ccnt As String =
String.Empty
'char counter
For i As Integer = 0 To s.Length - 1
If "1234567890".Contains(s(i).ToString()) Then
'extract repetition counter
ccnt += s(i)
Else
If s(i) = ESCAPE Then
i += 1
End If
If ccnt = "" Then
dsrle += s(i).ToString()
ccnt = ""
Else
dsrle += New [String](s(i), Integer.Parse(ccnt))
ccnt = ""
End If
End If
Next
Return dsrle
End Function

Universitas Sumatera Utara

Universitas Sumatera Utara

A-10

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
waktu_proses.Start()
TextBox4.Text = RunLengthDecode(TextBox1.Text)
waktu_proses.Stop()
TextBox5.Text = waktu_proses.Elapsed.TotalSeconds.ToString()
waktu_proses.Reset()
End Sub
Private Function cekKunci(ByVal huruf As Char) As Boolean
For i As Integer = 0 To ab - 1
If alpabet(i) = huruf Then
Return False
End If
Next
alpabet(ab) = huruf
ab += 1
Return True
End Function
Private Sub
Dim
Dim
For

putarKunci1(ByVal matrix As Char(,), ByVal huruf As Char)
limit As Boolean = False
temp As Char = " "c
i As Integer = 0 To 18
For j As Integer = 0 To 4
If matrix(i, j) = huruf Then
If j = 4 AndAlso i = 18 Then
temp = matrix(i, j)
matrix(i, j) = matrix(0, j)
matrix(0, j) = matrix(0, 0)
matrix(0, 0) = matrix(i, 0)
matrix(i, 0) = temp
limit = True
Exit For
ElseIf i = 18 Then
temp = matrix(i, j)
matrix(i, j) = matrix(0, j)
matrix(0, j) = matrix(0, j + 1)
matrix(0, j + 1) = matrix(i, j + 1)
matrix(i, j + 1) = temp
limit = True
Exit For
ElseIf j = 4 Then
temp = matrix(i, j)
matrix(i, j) = matrix(i + 1, j)
matrix(i + 1, j) = matrix(i + 1, 0)
matrix(i + 1, 0) = matrix(i, 0)
matrix(i, 0) = temp
limit = True
Exit For
Else
temp = matrix(i, j)
matrix(i, j) = matrix(i + 1, j)
matrix(i + 1, j) = matrix(i + 1, j + 1)
matrix(i + 1, j + 1) = matrix(i, j + 1)
matrix(i, j + 1) = temp
limit = True
Exit For
End If
End If

Universitas Sumatera Utara

Universitas Sumatera Utara

A-11

Next
If limit Then
Exit For
End If
Next
End Sub
Private Sub
Dim
Dim
For

putarKunci2(ByVal matrix As Char(,), ByVal huruf As Char)
limit As Boolean = False
temp As Char = " "c
i As Integer = 0 To 18
For j As Integer = 0 To 4
If matrix(i, j) = huruf Then
If i = 18 AndAlso j = 4 Then
temp = matrix(i, j)
matrix(i, j) = matrix(i, 0)
matrix(i, 0) = matrix(0, 0)
matrix(0, 0) = matrix(0, j)
matrix(0, j) = temp
limit = True
Exit For
ElseIf i = 18 Then
temp = matrix(i, j)
matrix(i, j) = matrix(i, j + 1)
matrix(i, j + 1) = matrix(0, j + 1)
matrix(0, j + 1) = matrix(0, j)
matrix(0, j) = temp
limit = True
Exit For
ElseIf j = 4 Then
temp = matrix(i, j)
matrix(i, j) = matrix(i, 0)
matrix(i, 0) = matrix(i + 1, 0)
matrix(i + 1, 0) = matrix(i + 1, j)
matrix(i + 1, j) = temp
limit = True
Exit For
Else
temp = matrix(i, j)
matrix(i, j) = matrix(i, j + 1)
matrix(i, j + 1) = matrix(i + 1, j + 1)
matrix(i + 1, j + 1) = matrix(i + 1, j)
matrix(i + 1, j) = temp
limit = True
Exit For
End If
End If
Next
If limit Then
Exit For
End If

Next
End Sub
Private Sub
Dim
Dim
Dim
For

dekripsi(ByVal bigram As String, ByVal Matrik As Char(,))
limit As Boolean = False
bigramx As Integer() = New Integer(1) {}
bigramy As Integer() = New Integer(1) {}
x As Integer = 0 To 1
For i As Integer = 0 To 18
For j As Integer = 0 To 4

Universitas Sumatera Utara

Universitas Sumatera Utara

A-12

If bigram(x) = Matrik(i, j) Then
bigramx(x) = i
bigramy(x) = j
limit = True
If limit = True AndAlso x = 2 Then
Exit For
End If
End If
Next
If limit = True AndAlso x = 2 Then
Exit For
End If
Next
Next
If bigramx(0) = bigramx(1) Then
If bigramy(0) = 0 Then
plain += Matrik(bigramx(0), 4).ToString() +
Matrik(bigramx(1), bigramy(1) - 1).ToString()
ElseIf bigramy(1) = 0 Then
plain += Matrik(bigramx(0), bigramy(0) - 1).ToString()
Matrik(bigramx(1), 4).ToString()
Else
plain += Matrik(bigramx(0), bigramy(0) - 1).ToString()
Matrik(bigramx(1), bigramy(1) - 1).ToString()
End If
ElseIf bigramy(0) = bigramy(1) Then
If bigramx(0) = 0 Then
plain += Matrik(18, bigramy(0)).ToString() +
Matrik(bigramx(1) - 1, bigramy(1)).ToString()
ElseIf bigramx(1) = 0 Then
plain += Matrik(bigramx(0) - 1, bigramy(0)).ToString()
Matrik(18, bigramy(1)).ToString()
Else
plain += Matrik(bigramx(0) - 1, bigramy(0)).ToString()
Matrik(bigramx(1) - 1, bigramy(1)).ToString()
End If
Else
plain += Matrik(bigramx(0), bigramy(1)).ToString() +
Matrik(bigramx(1), bigramy(0)).ToString()
End If
TextBox3.Text = plain
End Sub

+
+

+
+

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim kunci As String = TextBox2.Text
Dim PKunci As Integer = kunci.Length
Dim a As Integer = 0, asci As Integer = 32
Dim Matrik As Char(,) = New Char(18, 4) {}
waktu_proses.Start()
For i As Integer = 0 To 18
For j As Integer = 0 To 4
If a < PKunci Then
If cekKunci(kunci(a)) = True Then
Matrik(i, j) = kunci(a)
Else
j -= 1
End If
a += 1
Else
If cekKunci(ChrW(asci)) = True Then

Universitas Sumatera Utara

Universitas Sumatera Utara

A-13

Matrik(i, j) = ChrW(asci)
Else
j -= 1
End If
asci += 1
End If
Next
Next
Dim cipher As String = TextBox4.Text
Dim bigram As String = ""
Dim x As Integer = 0
bigram = cipher.Substring(x, 2)
x += 2
dekripsi(bigram, Matrik)
For i As Integer = 0 To cipher.Length - 3
If i Mod 2 = 0 Then
putarKunci1(Matrik, plain(i))
Else
putarKunci2(Matrik, plain(i))
bigram = cipher.Substring(x, 2)
x += 2
dekripsi(bigram, Matrik)
End If
Next
TextBox9.Text = TextBox3.Text.Count
waktu_proses.Stop()
TextBox8.Text = waktu_proses.Elapsed.TotalSeconds.ToString()
waktu_proses.Reset()
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button6.Click
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
Textcari.Text = ""
MsgBox("Data telah dihapus", MsgBoxStyle.Exclamation,
"Perhatian")
TextBox1.Focus()
End Sub
End Class

Universitas Sumatera Utara