Gambar 3.8 Sequence Diagram Sistem
3.4 Perancangan Sistem
3.4.1 Pembuatan algoritma program Pembuatan algoritma program adalah sebuah proses langkah-langkah algoritma LUC
dan Goldbach Codes kedalam bahasa pemrograman. Tahap-tahapnya adalah sebagai berikut:
1. Pembuatan alur sistem secara umum
2. Pembuatan alur proses enkripsi dan dekripsi dengan menggunakan
algoritma LUC dan penerapan algoritma LUC ke dalam bahasa pemrograman Visual Basic.
Universitas Sumatera Utara
3. Pembuatan alur proses kompresi dan dekompresi dengan menggunakan
algoritma Goldbach Codes dan penerapan algoritma Goldbach Codes kedalam bahasa pemrograman Visual Basic 2012.
4. Pembuatan proses pengujian bilangan prima dengan menggunakan Fermat
dan menerapkannya kedalam bahasa pemrograman Visual Basic 2012.
3.4.2 Alur proses sistem secara umum Alur proses sistem secara umum terbagi menjadi dua yaitu pada saat melakukan
proses enkripsi file PDF pdf menjadi cipherteks dan proses dekripsi file ciphertext menjadi file dengan format txt lalu proses kompresi dan dekompresi secara
keseluruhan.
Universitas Sumatera Utara
Proses tersebut dapat dilihat pada gambar 3.9 flowchart sistem secara umum.
Gambar 3.9 Alur Sistem Flowchart Secara Umum
Universitas Sumatera Utara
3.4.3 Alur proses pembangkit kunci Alur proses pembangkit kunci algoritma LUC dijelaskan sebagai berikut:
1. Nilai p ≠ q untuk mencari nilai N. Nilai p = 103, q = 109, maka hasil N =
11227 2.
Setelah mendapat nilai N, lalu dicari T = p-1.q-1.p+1.q+1. Proses perhitungan T = 102.108.104.110, maka didapat hasil 126023040.
Nilai e diambil dari relatif prima T, dimana GCD e,T=1. Maka GCD 10037, 126023040 =1 Setelah mendapat nilai e untuk kunci enkripsi, maka
dicari SN = LCM p-1q-1p+1q+1.Hasil dari perhitungan rumus SN = 2625480
3. Nilai SN yang didapat digunakan dalam rumus
e.d Mod SN = 1. 10037. d Mod 11227 memperoleh hasil kunci d = 2591213.
Adapun pseudoce pembangkit kunci adalah sebagai berikut:
Pseudocode Untuk Fungsi gcd
Private Shared Function must_gdc_withp As BigInteger, n As BigInteger As UInt16
Dim c_e As UInt16 Do
rng.GetBytesrnd c_e = BitConverter.ToUInt16rnd, 2
Loop While GCDc_e, p 1 OrElse c_e = p OrElse c_e = n Return c_e
End Function
Pseudocode Untuk Pembangkit Bilangan Prima
Private Shared Function generate_bil_prima As UInt16 Dim c_prima As UInt16
Do rng.GetBytesrnd
c_prima = CTypeBitConverter.ToUInt16rnd, 0 Mod 150, UInt16
Universitas Sumatera Utara
Loop While c_prima 85 OrElse Not Lehmannc_prima Return c_prima
End Function Private Shared Function GCDa As BigInteger, b As BigInteger As BigInteger
If a Mod b = 0 Then Return b
End If Return GCDb, a Mod b
End Function
Pseudocode Untuk Mencari Nilai tN
Private Shared Function generate_tNp As BigInteger, q As BigInteger As BigInteger
Return p + 1 p - 1 q + 1 q - 1 End Function
Pseudocode Untuk Metode Lehman Fermat
Private Shared Function Lehmannp As BigInteger As Boolean Dim tester As BigInteger, i As BigInteger = 0
System.Diagnostics.Debug.WriteLinep, p; Do
rng.GetBytesrnd tester = BitConverter.ToUInt16rnd, 2 Mod p
tester = BigInteger.ModPowtester, p - 1 2, p Fermat
System.Diagnostics.Debug.WriteLinetester, tester; If tester 1 AndAlso tester - p -1 Then
Return False End If
System.Diagnostics.Debug.WriteLinei, i; i += 1
Loop While i 5 Return True
End Function
Pseudocode Untuk Mencari LCM
Private Shared Function lcmParamArray empat As BigInteger As BigInteger Dim hasil As BigInteger = 1
For Each bil As BigInteger In empat hasil = lcmhasil, bil
Universitas Sumatera Utara
Next Return hasil
End Function Private Shared Function lcma As BigInteger, b As BigInteger As BigInteger
Return CTypea b GCDa, b, BigInteger End Function
Pseudocode Untuk Invers Modulo
Public Shared Function InverseModulara As BigInteger, b As BigInteger As BigInteger
Dim x1 As BigInteger, y1 As BigInteger, x2 As BigInteger, y2 As BigInteger, q As BigInteger, temp As BigInteger, _
modulo As BigInteger = b If a b Then
x1 = InlineAssignHelpery2, 1 x2 = InlineAssignHelpery1, 0
Else x1 = InlineAssignHelpery2, 0
x2 = InlineAssignHelpery1, 1 End If
While b 0 q = a b
temp = b b = a - q b
a = temp temp = x2
x2 = x1 - q x2 x1 = temp
temp = y2 y2 = y1 - q y2
y1 = temp End While
Return InlineAssignHelperx1, Ifx1 0, x1, modulo + x1 End Function
Universitas Sumatera Utara
Alur proses pembangkit kunci dapat dijelaskan pada flowchart gambar 3.10
Gambar 3.10 Flowchart Alur Pembangkit Kunci
3.4.5 Alur proses enkripsi LUC Berikut ini adalah langkah-langkah dalam melakukan enkripsi pesan dengan
menggunakan algoritma LUC: 1.
Ubah plainteks kedalam ASCII. Lalu pecah plainteks kedalam blok be-record, masing-masing blok terdiri dari dua karakter.
SABRINA : SA
BR IN
Asp 8365
6682 7378
6532
Universitas Sumatera Utara
2. Setelah plainteks diubah kedalam ASCII, maka hitung enkripsi dengan algoritma LUC :
V [ 2…10037 ] = m. V [ i – 1] – V [ i – 2] mod 11227 V [ 0 ] = 2
Maka didapat hasil enkripsi 2182-5036-8882-8860- Adapun pseudocode untuk proses enkripsi LUC sebagai berikut:
Private Shared Function barisan_LUCP As BigInteger, Q As BigInteger, e As BigInteger, N As BigInteger As BigInteger
Dim Vold As BigInteger = 2 Dim Vnew As BigInteger = P
Dim temp As BigInteger, i As BigInteger = 2 While i = e
temp = Vnew Vnew = P Vnew - Vold Mod N
Vold = temp i += 1
End While System.Diagnostics.Debug.WriteLineVnew
Return InlineAssignHelperVnew, IfVnew 0, Vnew, N + Vnew End Function
Universitas Sumatera Utara
Alur proses enkripsi LUC dijelaskan pada flowchart berikut ini:
Gambar 3.11 Flowchart Enkripsi LUC
3.4.6 Alur Proses Kerja Dekripsi LUC Adapun langkah-langkah dalam proses dekripsi file dengan menggunakan LUC
sebagai berikut: 1.
Hasil cipherteks Hasil cipherteks SABRINA adalah : 2182-5036-8882-8860- di dekripsi dengan menggunakan rumus:
V [1] = C V [ 2…d ] = C. V [ i – 1] – V [ i – 2] mod n
V [2... 2591213 ] = C. V [ i – 1] – V [ i – 2] mod 11227
Universitas Sumatera Utara
2. Maka Hasilnya kembali ke plainteks semula yaitu SABRINA.
Berikut ini merupakan alur flowchart proses dekripsi LUC
Gambar 3.12 Flowchart Dekripsi LUC
3.4.7 Alur Proses Kompresi Goldbach Codes Proses kompresi goldbach codes menggunakan tabel Goldbach G0 Code yang sudah
ditetapkan. Contoh terdapat file teks dengan string SABRINA. Maka proses sebelum dilakukannya kompresi adalah memasukkan string SABRINA kedalam ASCII Code
seperti tabel 3.1 dibawah ini:
Universitas Sumatera Utara
Tabel 3.1 ASCII Codes Proses Kompresi
Char ASCII Codes ASCII Code bin
Bit Freq
Bit x Freq A
65 01000001
8 2
16 S
83 01010011
8 1
8 B
66 01000010
8 1
8 R
82 01010010
8 1
8 I
73 01001001
8 1
8 N
78 01001001
8 1
8 Sp
32 00100000
8 1
8 Jumlah = 64
Setelah itu, dilakukan proses kompresi dengan Goldbach Codes menggunakan Goldbach G0 Code pada tabel 3.2
Tabel 3.2 Goldbach G0 Codes untuk Proses Kompresi
Char Freq N
2 n + 3 Prima Goldbach GO
Codes Bit
Bit x Freq
A 2
1 8
3+5 11
2 4
S 1
2 10
7+3 101
3 3
B 1
3 12
5 + 7 011
3 3
R 1
4 14
3 + 11 1001
4 4
I 1
5 16
5 + 11 0101
4 4
N 1
6 18
7 + 11 0011
4 4
Sp 1
7 20
7 + 13 00101
5 5
Jumlah = 30
Universitas Sumatera Utara
Maka hasil kompresinya adalah : 11101011100101010011001010000000
Hasil kompresi adalah 1110101110010101001100101, agar hasil kompresi dapat dibaca oleh komputer, maka dilakukan penambahan padding:
11101011100101010011001010000000
Penambahan padding dilakukan agar jumlah bit dapat dibagi menjadi 8 per bit. Agar dapat dibaca oleh komputer, maka dilakukan flagging dengan menambah biner sesuai
dengan penambahan padding yang dipakai. Dalam kasus diatas, padding yang digunakan sebanyak 7, maka biner 7 adalah
0111 . Maka hasil kompresi setelah
dilakukan padding dan flagging adalah 11101011100101010011001010000000 0111
Adapun pseudocode untuk kompresi Goldbach Codes sebagai berikut:
Private Shared Function e_goldbachi As Integer As String Dim sb As New StringBuilder
Dim bil As Integer = 0, bil2 As Integer = 0 Dim bil_akhir As Integer = Bil_Prima.Last
For j As Integer = bil_akhir + 1 To i If lehmannj Then
Bil_Prima.Addj End If
Next For j As Integer = Bil_Prima.Count - 1 To 0 Step -1
bil = Bil_Primaj bil2 = i - bil
If Bil_Prima.IndexOfbil2 = -1 Then Continue For
End If If bil = bil2 Then
Dim k As Integer = 1 bil = Bil_Primaj + k
bil2 = i - bil While Not Bil_Prima.Containsbil2
bil = Bil_Primaj + k bil2 = i - bil
k += 1 End While
Universitas Sumatera Utara
Exit For End If
Next sb.Append1
For j As Integer = Bil_Prima.IndexOfbil - 1 To 0 Step -1 If Bil_Primaj bil2 Then
sb.Insert0, 0c Else
sb.Insert0, 1c End If
Next Return sb.ToString
End Function
Alur flowchart untuk kompresi Goldbach Codes ditunjukkan pada gambar 3.13
Gambar 3.13 Flowchart Kompresi Goldbach Code
Universitas Sumatera Utara
Proses dekompresi pada Goldbach Codes adalah sistem membaca hasil kompresi lalu membalikkan file ke keadaan semua
S A
B R
I N
A 101
11 011
1001 0101 0011 101
Adapun pseudocode untuk dekompresi Goldbach Codes adalah sebagai berikut:
Public Shared
Function dekompresis_values
As Byte
As Byte
Dim hasil
As New
List Of
Byte Dim
i As
Integer = 0
Dim sb
As New
StringBuilder For
i = 0 To
s_values.Length - 2 sb.Append
Convert .ToStrings_valuesi, 2.PadLeft8,
0c Next
If flag = 1
Then sb.Append
Convert .ToStrings_valuesi, 2.Remove0, 1
Else sb.Append
Convert .ToStrings_valuesi, 2.PadLeft8,
0c End
If decodinghasil, sb
Return hasil.ToArray
End Function
Private Shared
Sub decodinghasil
As List
Of Byte
, sb As
StringBuilder Dim
bin As
New StringBuilder
Dim n
As Integer
= 0, i As
Integer = 0
While i sb.Length
If sbi =
1c Then
n += 1 End
If bin.Appendsbi
If n = 2
Then hasil.Addeg_encoding.FirstOrDefault
Function x x.Value =
bin.ToString.Key bin.Clear
n = 0 End
If i += 1
End While
End Sub
3.5 Perancangan Interface