nkolom
j
j i x i h
1
) , ( ) (
nbaris
i
j i x j h
1
) , ( ) (
3.3.2 Pembelajaran Tanda Tangan Manual Dengan LVQ
Dalam proses pembelajaran kumpulan data dalam template dicari beban
akhir dalam proses pembelajaran, beban akhir dari pembelajaran digunakan dalam
proses pengenalan tanda tangan manual. Berikut flowchart proses pembelajaan
tanda tangan manual dengan LVQ tampak pada gambar 3.8.
3.3.3 Pengenalan Tanda Tangan Manual
Dalam proses pengenalan, beban akhir dari proses pembelajaran
digunakan sebagai penentu hasil karena dalam algoritma LVQ, jarak terdekat dari
input data dengan beban akhir adalah hasil dari pengenalan. Berikut flowchart
pengenalan tanda tangan manual pada gambar 3.9.
Gambar 3.8 Flowchart proses pembelajaran LVQ
Gambar 3.9 Flowchart proses pengenalan tanda tangan manual
3.3.4 Pembangkitan Kunci Tanda Tangan Digital RSA
Dalam pemrosesan tanda tangan digital, kunci adalah parameter yang
sangat penting. Parameter yang utama dalam pembangkitan kunci algoritma RSA
adalah bilangan prima p dan q, untuk menghasilkan n. Semakin besar nilai prima
p dan q semakin besar pula tingkat kesulitan untuk memfaktorkan bilangan
menjadi faktor primanya. Menurut Munir (2005) nilai p dan q disarankan lebih
dari 100 digit agar pemfaktoran menjadi sangat sukar dan hampir tidak mungkin
dilakukan. Flowchart Proses pembangkitan kunci publik dan kunci privat dalam
algoritma RSA sebagai berikut :
Gambar 3.10 Flowchart pembangkitan kunci RSA
Agar algoritma RSA dapat dimplementasikan dalam algoritma
pemrograman nilai dari p dan q diasumsikan diatas 2 sampai 5 digit bilangan
positif. Algoritma RSA dalam proses enkripsi dilakukan dengan kunci publik (e)
dan proses dekripsi dengan kunci privat (d), sedangkan dalam tanda tangan digital
kebalikan dari kriptografi kunci publik yaitu proses enkripsi (signing) dilakukan
dengan kunci privat dan dekripsi (Verifying) dilakukan dengan kunci publik.
3.3.5 Proses Enkripsi (Signing) Tanda Tangan Digital
Proses enkripsi dengan algoritma RSA menggunakan kunci publik (e, n).
Flowchart proses signing tanda tangan digital dapat dilihat pada Gambar berikut:
Gambar 3.11 Flowchart Proses Signing algoritma RSA
3.3.6 Proses Verifikasi Tanda Tangan Digital
Dalam proses pemverifikasian sebuah dokumen yang dikirim proses
pertama yaitu pengenalan dari user dalam perangkat lunak menggunakan tanda
tangan manual. Kemudian proses pemverifikasian dilakukan dengan kunci privat
(d,n) dari user yang mengirim pesan. Flowchart proses verifying tanda tangan
digital dapat dilihat pada gambar 3.12.
Gambar 3.12 Flowchart Proses verifiying algoritma RSA
3.3.7 Contoh Perhitungan Dengan LVQ
Pada subbab ini tidak menggunakan perhitungan dengan data yang
sebenarnya, namun memakai nilai yang sederhana sehingga muda untuk dipahami
maksud dari sistem kerja perangkat lunak ini. Misalkan diketahui 10 input vector
dalam 2 kelas sebagai berikut :
Tabel 3.1 Data Matrik input gambar
No Matrik Input (X) Kelas
1 1, 0, 0, 0, 1, 0 1
2 0, 0, 1, 0, 0, 1 1
3 0, 0, 1, 0, 1, 0 1
4 0, 1, 0, 0, 0, 1 1
5 1, 0, 1, 0, 1, 1 1
6 0, 1, 1, 1, 1, 0 2
7 0, 0, 1, 1, 0, 0 2
8 0, 1, 0, 1, 0, 0 2
9 1, 0, 0, 1, 0, 1 2
10 0, 1, 1, 1, 1, 1 2
Dua inputan yang pertama akan diinisialisasi sebagia bobot :
Tabel 3.2 Data Bobot
No Matrik Bobot Target
1 1, 0, 0, 0, 1, 0 1
2 0, 1, 1, 1, 1, 0 2
Sedangkan 8 inputan sisanya akan digunakan sebagai data yang akan dilatih :
Tabel 3.3 Data Latih
No Matrik Latih Target
1 0, 0, 1, 0, 0, 1 1
2 0, 0, 1, 0, 1, 0 1
3 0, 1, 0, 0, 0, 1 1
4 1, 0, 1, 0, 1, 1 1
5 0, 0, 1, 1, 0, 0 2
6 0, 1, 0, 1, 0, 0 2
7 1, 0, 0, 1, 0, 1 2
8 0, 1, 1, 1, 1, 1 2
Sebagai Nilai awal dipilih Learning Rate ( ) = 0.05, dengan pengurangan
sebesar 0.1* , dan maksimum epoch (MaxEpoch) = 100
Epoch ke-1 :
Data Ke-1 : (0, 0, 1, 0, 0, 1)
Jarak pada bobot ke 1
= ( 0 - 1 )
2
+ ( 0 0 )
2
+ ( 1 0 )
2
+ ( 0 0 )
2
+ ( 0 1 )
2
+ ( 1 0 )
2
= 2
Jarak Pada bobot ke 2
= ( 0 - 0 )
2
+ ( 0 1 )
2
+ ( 1 1 )
2
+ ( 0 1 )
2
+ ( 0 1 )
2
+ ( 1 0 )
2
= 2
Jarak Terkecil adalah pada w ke-1
Target data ke-1 adalah 1
Karena target data ke-1 = w ke-1, maka w ke-1 baru adalah :
W
j(baru)
= W
j(lama)
+ ( X
i
- W
j(lama)
)
= 1 + 0.05*(0-1) = 0.95
= 0 + 0.05*(0-0) = 0
= 0 + 0.05*(1-0) = 0.05
= 0 + 0.05*(0-0) = 0
= 1 + 0.05*(0-1) = 0.95
= 0 + 0.05*(1-0) = 0.05
W
1(baru)
= (0.95, 0, 0.05, 0, 0.95, 0.05)
Data Ke-2 : (0, 0, 1, 0, 1, 0)
Jarak pada bobot ke 1
= (0 0.95)
2
+ (0 0)
2
+ (1 0.05)
2
+ (0 0)
2
+ (1 0.95)
2
+ (1 0.05)
2
= 1.345
Jarak Pada bobot ke 2
= ( 0 - 0 )
2
+ ( 0 1 )
2
+ ( 1 1 )
2
+ ( 0 1 )
2
+ ( 1 1 )
2
+ ( 0 0 )
2
= 1.414
Jarak Terkecil adalah pada w ke-1
Target data ke-2 adalah 1
Karena target data ke-2 = w ke-1, maka w ke-1 baru adalah :
W
j(baru)
= W
j(lama)
+ ( X
i
- W
j(lama)
)
= 0.95 + 0.05*(0-0.95) = 0.9025
= 0.00 + 0.05*(0-0.00) = 0
= 0.05 + 0.05*(1-0.05) = 0.0975
= 0.00 + 0.05*(0-0.00) = 0
= 0.95 + 0.05*(1-0.95) = 0.9525
= 0.05 + 0.05*(0-0.05) = 0.0475
W
1(baru)
= (0.9025, 0, 0.0975, 0, 0.9525, 0.0475)
Data Ke-3 : (0, 1, 0, 0, 0, 1)
Jarak pada bobot ke 1
= (0 0.9025)
2
+ (1 0)
2
+ (0 0.0975)
2
+ (0 0)
2
+ (0 0.9525)
2
+ (1
0.0475)
2
= 1.907
Jarak Pada bobot ke 2
= ( 0 - 0 )
2
+ ( 1 1 )
2
+ ( 0 1 )
2
+ ( 0 1 )
2
+ ( 0 1 )
2
+ ( 1 0 )
2
= 2
Jarak Terkecil adalah pada w ke-1
Target data ke-3 adalah 1
Karena target data ke-3 = w ke-1, maka w ke-1 baru adalah :
W
j(baru)
= W
j(lama)
+ ( X
i
- W
j(lama)
)
= 0.9025 + 0.05*(0-0.9025) = 0.8574
= 0.0000 + 0.05*(0-0.0000) = 0.0500
= 0.0975 + 0.05*(1-0.0975) = 0.0926
= 0.0000 + 0.05*(0-0.0000) = 0.0000
= 0.9525 + 0.05*(1-0.9525) = 0.9049
= 0.0475 + 0.05*(0-0.0475) = 0.0951
W
1(baru)
= (0.8574, 0.0500, 0.0926, 0.0000, 0.9049, 0.0951)
Data Ke-4 : (1, 0, 1, 0, 1, 1)
Jarak pada bobot ke 1
=(10.8574)
2
+(00.0500)
2
+(10.0926)
2
+(00.0000)
2
+(10.9049)
2
+(1
0.0951)
2
= 1.293
Jarak Pada bobot ke 2
= ( 1- 0 )
2
+ ( 0 1 )
2
+ ( 1 1 )
2
+ ( 0 1 )
2
+ ( 1 1 )
2
+ ( 1 0 )
2
= 2
Jarak Terkecil adalah pada w ke-1
Target data ke-4 adalah 1
Karena target data ke-4 = w ke-1, maka w ke-1 baru adalah :
W
j(baru)
= W
j(lama)
+ ( X
i
- W
j(lama)
)
= 0.8574+ 0.05*(0-0.8574) = 0.8645
= 0.0500+ 0.05*(0-0.0500) = 0.0475
= 0.0926 + 0.05*(1-0.0975) = 0.1380
= 0.0000+ 0.05*(0-0.0000) = 0.0000
= 0.9049 + 0.05*(1-0.9049) = 0.9096
= 0.0951 + 0.05*(0-0.0951) = 0.1404
W
1(baru)
= (0.8645, 0.0475, 0.1380, 0.0000, 0.9096, 0.1404)
Data Ke-5 : (0, 0, 1, 1, 0, 0)
Jarak pada bobot ke 1
=(10.8645)
2
+(00.0475)
2
+(10.1380)
2
+(00.0000)
2
+(10.9096)
2
+(1
0.1404)
2
= 1.827
Jarak Pada bobot ke 2
= ( 0 - 0 )
2
+ ( 0 1 )
2
+ ( 1 1 )
2
+ ( 1 1 )
2
+ ( 0 1 )
2
+ ( 0 0 )
2
= 1.414
Jarak Terkecil adalah pada w ke-2
Target data ke-5 adalah 2
Karena target data ke-5 = w ke-2, maka w ke-2 baru adalah :
W
j(baru)
= W
j(lama)
+ ( X
i
- W
j(lama)
)
= 0 + 0.05*(1-0) = 0.0000
= 1 + 0.05*(0-1) = 0.9500
= 1 + 0.05*(1-1) = 1.0000
= 1 + 0.05*(0-1) = 1.0000
= 1 + 0.05*(1-1) = 0.9500
= 0 + 0.05*(1-0) = 0.0000
W
2(baru)
= (0.0000, 0.9500, 1.0000, 1.0000, 0.9500, 0.0000)
Data Ke-6 : (0, 1, 0, 1, 0, 0)
Jarak pada bobot ke 1
=(10.8645)
2
+(00.0475)
2
+(10.1380)
2
+(00.0000)
2
+(10.9096)
2
+(1
0.1404)
2
= 1.876
Jarak Pada bobot ke 2
= ( 0 - 0 )
2
+ ( 1 0.95 )
2
+ ( 0 1 )
2
+ ( 1 1 )
2
+ ( 0 0.95 )
2
+ ( 0 0 )
2
= 1.380
Jarak Terkecil adalah pada w ke-2
Target data ke-6 adalah 2
Karena target data ke-6 = w ke-2, maka w ke-2 baru adalah :
W
j(baru)
= W
j(lama)
+ ( X
i
- W
j(lama)
)
= 0.0000 + 0.05*(0-0.0000) = 0.0000
= 0.9500 + 0.05*(1-0.9500) = 0.9525
= 1.0000 + 0.05*(0-1.0000) = 0.9500
= 1.0000 + 0.05*(1-1.0000) = 1.0000
= 0.9500 + 0.05*(0-0.9500) = 0.9025
= 0.0000 + 0.05*(0-0.0000) = 0.0000
W
2(baru)
= (0.0000, 0.9525, 0.9500, 1.0000, 0.9025, 0.0000)
Data Ke-7 : (1, 0, 0, 1, 0, 1)
Jarak pada bobot ke 1
=(10.8645)
2
+(00.0475)
2
+(10.1380)
2
+(00.0000)
2
+(10.9096)
2
+(1
0.1404)
2
= 1.614
Jarak Pada bobot ke 2
= ( 1 - 0 )
2
+ ( 0 0.9525 )
2
+ ( 0 0.95 )
2
+ ( 1 1 )
2
+ ( 0 0.9025 )
2
+ ( 0
1 )
2
= 2.150
Jarak Terkecil adalah pada w ke-2
Target data ke-7 adalah 2
Karena target data ke-7 w ke-1, maka w ke-1 baru adalah :
W
j(baru)
= W
j(lama)
+ ( X
i
- W
j(lama)
)
= 0.8645+ 0.05*(0-0.8645) = 0.8577
= 0.0475 + 0.05*(1-0.0475) = 0.0499
= 0.1380 + 0.05*(0-0.1380) = 0.1449
= 0.0000 + 0.05*(1-0.0000) = -0.050
= 0.9096 + 0.05*(0-0.9096) = 0.9551
= 0.1404 + 0.05*(0-0.1404) = 0.0974
W
1(baru)
= (0.8577, 0.0499, 0.1449, -0.050, 0.9551, 0.0974)
Data Ke-8 : (0, 1, 1, 1, 1, 1)
Jarak pada bobot ke 1
=(10.8577)
2
+(00.0499)
2
+(10.1449)
2
+(0+0.050)
2
+(10.9551)
2
+(1
0.0974)
2
= 2.071
Jarak Pada bobot ke 2
= ( 0 - 0 )
2
+ ( 1 0.9525 )
2
+ ( 1 0.95 )
2
+ ( 1 1 )
2
+ ( 1 0.9025 )
2
+ ( 1
0 )
2
= 1.002
Jarak Terkecil adalah pada w ke-2
Target data ke-8 adalah 2
Karena target data ke-8 w ke-2, maka w ke-2 baru adalah :
W
j(baru)
= W
j(lama)
+ ( X
i
- W
j(lama)
)
= 0.0000 + 0.05*(0-0.0000) = 0.0000
= 0.9525 + 0.05*(1-0.9525) = 0.9549
= 0.9500 + 0.05*(0-0.9500) = 0.9525
= 1.0000 + 0.05*(1-1.0000) = 1.0000
= 0.9025 + 0.05*(0-0.9025) = 0.9074
= 0.0000 + 0.05*(0-0.0000) = 0.0500
W
2(baru)
= (0.0000, 0.9549, 0.9525, 1.0000, 0.9074, 0.0500)
= 0.1 * = 0.05 0.1 * 0.05 = 0.045
Proses ini diteruskan untuk epoch ke-2 sampai dengan epoch ke 100.
setelah mencapai epoch yang ke-100 diperoleh bobot akhir :
W
1
= (0.3727 0.2161 0.6347 0.2164 0.7901 0.4254)
W
1
= (0.0000 0.7969 0.7900 1.0000 0.5869 0.2171)
Maka jika kita mau menstimulasikan inpit (1, 0, 0, 0, 0, 1) maka kita cari
terlebih dahulu jarak input tersebut terhadap kedua bobot. Nomor dari bobot
dengan jarak terpendek akan menjadi kelasnya.
Jarak pada bobot ke 1
= (10.3727)
2
+(00.2161)
2
+(10.6347)
2
+(0-0.2164)
2
+(00.7901)
2
+(1
0.4254)
2
=1.3581
Jarak Pada bobot ke 2
= (1- 0.0000)
2
+(0 0.7969)
2
+(1 0.7900)
2
+(0 1.0000)
2
+(0 0.5869)
2
+(1
0.2171)
2
= 2.0534
Jarak Terkecil pada bobot ke-1, Sehingga input tersebut termasuk pada kelas-1
3.4 Perancangan Sistem
3.4.1 Use Case
Use case dibuat untuk menggambarkan aktivitas-aktivitas yang dilakukan
dalam sistem. Model analisa use case diwakili dengan diagram use case. Diagram
use case menggambarkan fungsionalitas sistem sebagai prosedur/aturan yang
disepakati sistem berjalan sesuai dengan yang diinginkan.
User
Proses image preprocessing
Proses pembentukan hash
Proses pembelajaran LVQ
Form konfigurasi
Proses Pembentukan kunci RSA
Proses pengenalan tanda tangan Form Signing
Proses enkripsi
Form Verifyng Proses dekripsi
Gambar 3.13 Use case Sistem pengenalan pola tanda tangan
3.4.2 Sequence Diagram
Diagram ini menjelaskan interaksi objek yang disusun dalam suatu urutan
waktu dan memperlihatkan tahap demi tahap apa yang seharusnya terjadi untuk
menghasilkan sesuatu didalam use case.
3.4.2.1 Sequence Diagram Proses Pengolahan Image Preprocessing
Proses ini proses untuk mengubah bentuk citra menjadi citra biner
kemudian peringkasan citra biner menggunkan fungsi hash satu arah.
: User
Image
preprocessing
Grayscale
citra keabuan
Threshold Thining Crooping Scalling Chain code Hash
: TGambar Get Image
Pengolahan image
Set image
setting derajat keabuan
Penipisan image
set image
set image menjadi 20x20
pengubahan bentuk matrix
peringakasan matrix
Simpan hasil hash
Gambar 3.14 Sequnce diagram proses image preprocessing
3.4.2.2 Sequence Diagram Proses Signing
Proses ini melalui tahap pembelajaran terlebih dahulu kemudian
pengenalan tanda tangan, hasil dari pengenalan berupa nim, nama dan nilai hash
dari peringkasan citra biner. menggunkan kunci publik e dan n dari hasil
pembentukan kunci.
: User
Training LVQ
: TGambar
Pengenalan
tanda tangan
enkripsi
Set Learning Rate
Set Max Epoch
Set target error
Get training data
Get data bobot
Hitung jarak terdekat
set nim, nama, nilai hash
set kunci publik (e,n)
Gambar 3.15 Sequence diagram proses signing
3.4.2.3 Sequence Diagram Proses Verifikasi
Proses verifikasi yaitu mendekripsikan file dari hasil enkripsi di dalam
proses signing. Proses dekripsi menggunkan kunci privat d dan n setelah
pendekripsian data tersebut akan dicek apakah terdaftar atau belum terdaftar
: User
Data Enkripsi Kunci privat
: TGambar
Verifikasi
Get file
Set kunci d
Set junci n
Pengecekan data
Hasil dekripsi
Terdaftar
Gambar 3.16 Sequence diagram proses verifikasi
3.4.3 Activity Diagram
Diagram aktivitas memodelkan alur kerja (work flow) sebuah proses atau
use case dan urutan aktivitas dalam suatu proses. Berikut proses aktivitas
keseluruhan dari proses pengenalan pola tanda tangan manual dan tanda tangan
digital.
Mengambil image
berwarna 24 bit *.bmp
proses image
preprocessing
mendapatkan
hasil citra biner
melalukan funsi hash
untuk peringkasan biner
simpan data
hash
melakukan proses pembelajaran
tanda tangan manual
pembentukan kunci
tanda tangan digital
Pengenalan
tanda tangan
proses
enkripsi
simpan file
hasil enkripsi
memasukkan kunci
publik e dan n
ambil file hasil
enkripsi
memasukkan kunci
privat d dan n
proses
dekripsi
proses
pengecekan data
Form verifyng Form Signing Form Konfigurasi User
Gambar 3.17 Activity diagram
3.5 Struktur Basis Data
Basis data adalah suatu pengorganisasian sekumpulan data yang saling
terkait sehigga memudahkan aktivitas untuk memperoleh informasi. (Kadir, 2003:
254). Berikut adalah tabel yang digunakan dalam proses jalanya aplikasi.
1. Nama Tabel : TGambar
Kunci utama (*) : Id_gambar
Fungsi : Tabel ini berisi pengguna yang mempunyai tanda
tangan manual dan tanda tangan digital.
Tabel 3.4 Basis Data pengguna (User)
Field Type Allow Null
Id_gambar AutoNumber (LongInt) No
Id_user Number (LongInt) No
Nim Number (LongInt) No
Nama_user Text (50) No
Nama_file Text (50) No
publik_e Text (50) No
Publik_n Text (50) No
Hash Text (100) No
2. Nama Tabel : Tbtm
Kunci utama (*) : Id_user
Fungsi : Tabel ini digunakan pengguna yang menyimpan
vektor dari tanda tangan manual.
Tabel 3.5 Basis Data Tanda tangan manual
Field Type Allow Null
Id_user AutoNumber (LongInt) No
Nama_user Text (50) No
Vektor Memo No
Threshold Number No
3. Nama Tabel : Tbobot
Kunci utama (*) : Id
Fungsi : Tabel ini digunakan pengguna yang menyimpan
vektor dari tanda tangan manual.
Tabel 3.6 Basis Data beban akhir
Field Type Allow Null
Id_user Text (50) No
Id_bobot AutoNumber (LongInt) No
Input_ke Number No
Nilai Number No
3.6 Perancangan Uji Coba
Tujuan dari subbab ini adalah untuk mencari arsitektur jaringan saraf
tiruan yang optimal dalam proses pelatihan dan pengenalan. Arsitektur jaringan
saraf tiruan yang dimaksudkan adalah nilai learning rate dan target error.
3.6.1 Skenario Uji Coba
Pengujian dilakukan dalam 2 bagian yaitu pengujian tanda tangan manual
dan pengujian tanda tangan digital. Data tanda tangan berjumlah 13 orang dengan
masing-masing orang memberikan 3 contoh tanda tangan sebagai data latih jadi
data keseluruhan sebanyak 39 tanda tangan.
3.6.1.1 Pengujian Tanda Tangan Manual LVQ
Pengujian ini dilakukan dengan cara mecoba jumlah unit pada learning
rate antara 0,01 sampai 0,09. nilai max epoch adalah 100 dan 1000 untuk
mendapatkan hasil yang maksimal maka epoch dapat diperbesar hingga 10.000
epoch Hasil dari uji coba disajikan pada tabel 3.7.
Tabel 3.7 Rancangan tabel Tanda tangan manual LVQ
Learning
Rate
Max
Epoch
Target
Error
Waktu
Training
(milidetik)
Hasil
Training
Konvergen Hasil
3.6.1.2 Pengujian Tanda Tangan Digital RSA
Pengujian dilakukan dengan mencatat waktu yang dibutuhkan terhadap
file plaintext, dekripsi terhadap file hasil enkripsi. Penyajian pengujian tanda
tangan digital RSA dapat dilihat pada tabel dibawah ini:
Tabel 3.8 Rancangan Tabel Tanda Tangan digital RSA
Uji Ke
Ukuran
File kb
Nilai
n
Kunci
e
Kunci
d
Waktu
signing
Waktu
Verfiyng
BAB IV
IMPLEMENTASI DAN HASIL
4.1 Implementasi Program
4.1.1 Implementasi Antarmuka
Di dalam penjelasan program ini dijelaskan tentang alur pembuatan dan
kegunaan program yang dibuat beserta tampilan desain. Berikut ini struktur
program yang menggambarkan tampilan-tampilan halaman yang ada dalam
program.
Gambar 4.1 Struktur Menu program
4.1.1.1 Halaman Menu Utama
Halaman menu utama ini merupakan tampilan awal saat program
dijalankan, dimana dalam menu utama ini terdapat pilihan untuk memasuki form
yang lain yaitu terdapat form konfigurasi, form make key, form signing dan form
verifiying. Masing-masing form memiliki fungsi yang berbeda-beda dalam
aplikasi ini. Berikut penjelasan dari setiap form dalam halaman menu utama dan
juga gambarnya:
1. Konfigurasi : untuk melakukan proses image preprocessing dan
pembelajaran tanda tangan
2. Make Key : untuk setting tanda tangan manual dan tanda tangan
digital
3. Signing : untuk proses signing
4. Verifikasi : untuk verifikasi tanda tangan
5. Close : untuk keluar dari program
Gambar 4.2 Halaman Menu Utama
4.1.1.2 Form Konfigurasi
Pada halaman form konfigurasi terdapat proses untuk melakukan
konfigurasi perangkat lunak terdiri dari pengenalan pola tanda tangan manual
berupa inputan image *.bmp yang diproses dengan image preprocessing dan
Proses pembelajaran LVQ.
1. Form Image Preprocesing
Form Image Preprocesing digunakan untuk mengenali pola tanda tangan
berupa image .bmp. Proses yang dilalui dalam tahap image preprocessing yaitu
grayscale, thining, crooping, scalling.
Gambar 4.3 Form Image Preprocesing
Halaman ini berfungsi untuk mengkonfigurasi antara tanda tangan
manual dengan tanda tangan digital, gambar hasil scan di ambil dari filelist box
yang disesuaikan dengan alamat drive dan foldernya, selanjutnya gambar diproses
dengan image preprocesing yang terdapat pada menu image preprocesing. Menu-
menu yang ada adalah :
1. Button Image Preprocessing terdapat Grayscale, Threshold, Thining,
Crooping, Scalling.
2. Page control terdapat 2 page yaitu halaman untuk hasil proses image
preprocessing dan halaman ke 2 untuk hasil kode binerisasi.
3. Button simpan untuk menyimpan data hasil Image Preprocessing dan
identitas pemilik tanda tangan.
2. Form Learning LVQ
Form Learning LVQ digunakan untuk proses pembelajaran pada jaringan
saraf tiruan dengan 3 inputan yaitu Max epoch, Learning Rate, Target error.
Gambar 4.4 Form Learning LVQ
1. Button Pembelajaran, tentang proses pembelajaran LVQ setelah
memberikan inputan max epoch, learnrate, error rate.
2. Memo1 untuk proses thread dan pembelajaran sedangkan memo 2 untuk
hasil lama waktu training dan load data.
3. Button simpan file untuk menyimpan data.
4.1.1.3 Form Pembentukan Kunci RSA
Form Pembentukan Kunci RSA digunakan untuk pembuatan kunci tanda
tangan digital dengan inputan bilangan prima p dan bilangan prima q.
Gambar 4.5 Form Pembentukan Kunci RSA
Pada pembuatan kunci tanda tangan digital lebih ke segi matematikanya
keterangan gambar tersebut adalah :
1. Button hitung n berfungsi untuk mencari nilai n dari dua bilangan prima p
dan q.
2. Kemudian untuk button hitung kunci untuk menghitung kunci privat d
yang dihasilkan dari bilangan prima.
3. Button random untuk mengacak bilangan prima.
4.1.1.4 Form Signing
Form signing digunakan untuk mengenali tanda tangan dengan jaringan
saraf tiruan LVQ (Learning Vector Quantization) dan melakukan proses enkripsi
dengan algoritma RSA (Rivest Shamir Adleman).
Gambar 4.6 Implementasi Form Signing
Form ini berfungsi untuk melakukan proses signing dengan mengambil
image yang telah disimpan terlebih dahulu. Proses signing merupakan proses
pengengkripsian tanda tangan dari kunci d, dan n.
Menu-Menu yang terdapat pada halaman ini antara lain :
2. Button Load Image, digunakan untuk mengambil gambar yang ada
didalam file berupa *.bmp.
3. Button Pengenalan yaitu untuk mengenali tanda tangan manual dari LVQ.
4. Button signing untuk menandatangani dengan kunci e dan n yang akan di
tanda tangani digital.
5. Hasil pengenalan berupa image, nim, nama dan Hash tanda tangan.
6. Button save untuk menyimpan hasil dari enkripsi data.
7. Ltime unuk hasil waktu signing.
4.1.1.5 Form Verifying
Form verifying digunakan untuk dekripsi file menggunakan kunci privat d
dan kunci privat publik n untuk mengetahui bahwa data tersebut telah terdaftar.
Gambar 4.7 Implementasi Form verifying
Halaman ini berfungsi untuk mengecak keaslian dari tanda tangan yaitu
tanda tangan manual menggunakan metode LVQ dan tanda tangan digital dengan
metode RSA. Menu-menu yang ada pada halaman ini adalah :
1. Button Load File digunakan untuk memangil file hasil enkripsi.
2. Button verifikasi digunakan untuk mengecek tanda tangan digital untuk
mengetahui data tersebut terdaftar.
4.1.2 Implementasi Pemrosesan Citra (Image Preprocessing)
Implementsai pemrosesan citra terdiri dari beberapa subproses seperti
yang dijelaskan sebagai berikut :
a. Grayscale
Metode pengubahan warna dari RGB ke Grayscale menggunakan fungsi
pengubah. Untuk melakukan perhitungan tersebut perlu diambil intensitas tiap
warna pada tiap blok pixel.
Gambar 4.8 Source code fungsi RGBToGray
b. Thresholding
Proses Thresholding (nilai ambang) dilakukan dengan membandingkan nilai
grayscale dari tiap Pixel dengan nilai yang digunakan untuk thresholding.
Gambar 4.9 Source code Fungsi Threshold
var
x,y,r,g,b:integer;
Clr:TColor;
begin
for y := 0 to image1.Height-1 do
begin
for x := 0 to image1.width-1 do
begin
Clr := image1.canvas.Pixels[x,y];
r := GetRValue(clr);
g := GetGValue(clr);
b := GetBValue(Clr);
clr := Round((r+g+b)/3);// Mengubah RGB ke graysacale
image1.canvas.Pixels[x,y] := RGB(clr,clr,clr);
end; end; end;
FunctionTForm1.Thres(ABitmap:TBitmap;AThreshold:byte;Intensi
ty,Saturation : boolean):TBitmap;
Var
LRowIn, LRowOut : PRGBTripleArray;
Ly, Lx : integer;
LBlack, LWhite : TRGBTriple;
if Intensity then begin
then LRowOut[Lx] := LWhite
else LRowOut[Lx] := LBlack;
end else if Saturation then begin
LR1 := trunc( (-0.105465 * LR)+(-0.207424 *
LG)+(0.312889 * LB) ); //perhitungan nilai ambang
if (0.3 * LR) + (0.59 * LG) + (0.11 * LB) >= AThreshold
LR2 := trunc( (0.445942 * LR) + (-0.445942 * LG) );
if Sqrt( Sqr(LR1) + Sqr(LR2) ) >= AThreshold then
LRowOut[Lx] := LWhite
else LRowOut[Lx] := LBlack;
end; end; end;end;
c. Cropping
Cropping dilakukan dengan mengambil perpotongan x dan y. berikut
implementasi untuk cropping.
Gambar 4.10 Source code Fungsi Cropping
d. Scalling
Pada tahap ini ukuran citra diperbesar dan diperkecil sesuai dengan yang
ditetapkan pada implementasi skripsi ini yaitu diperkecil menjadi ukuran 20 x 20.
var
TmpBmp : TBitmap;
warna,titik,x,y : integer;
begin
Image1.Canvas.DrawFocusRect(Rect(PDown.x, PDown.y,
PActually.x, PActually.y));
TmpBmp := TBitmap.Create;
with TmpBmp do
try
Width := Round(abs(PActually.x - PDown.x));
Height := Round(abs(PActually.y - PDown.y));
BitBlt(Canvas.Handle, 0, 0, Width, Height,
//untuk drag obyek yang dipotong
Image1.Canvas.Handle, PDown.x,PDown.y, SRCCOPY);
for x:=1 to 20 do
for y:=1 to 20 do
begin
titik:=0;
warna:=getRValue(TmpBmp.Canvas.Pixels[x,y]);
if warna<255 then
begin
warna:=clBlack;
titik:=1;
var
a,b:real;
i,j,warna,titik:integer;
begin
image1.Picture.Bitmap.PixelFormat:=pf8bit;
image3.Picture:=image1.Picture;
lebar:=20;
Gambar 4.11 Source code Fungsi Scalling
e. Pengkodean Karakter
Setelah proses awal selesai dilakukan maka proses selanjutnya yaitu
pengkodean. Gambar dikodekan menjadi biner dan ditampilkan pada stringgrid.
Gambar discalling menjadi 20 x 20 piksel selanjutnya dikodekan jika berwarna
hitam maka dikodekan satu dan juga sebaliknya jika berwarna putih maka
dikodekan 0. Listing programnya sebagai berikut :
Gambar 4.12 Source code Pengkodean karakter
4.1.3 Implementasi Jaringan Saraf Tiruan LVQ (Learning Vector
Quantization)
Pada awal tahap pengenalan tanda tangan harus melalui proses
pembelajaran terlebih dahulu keseluruhan data image menggunakan Jaringan saraf
Tiruan LVQ.
tinggi:=20;// untuk menyamakan ukuran 20x20
a:=image1.Width/lebar;
b:=image1.Height/tinggi;
scalling(1/a,1/b);
image3.Picture.Bitmap.Width:=lebar;
image3.Picture.Bitmap.Height:=tinggi;
for i:=0 to lebar-1 do
for j:=0 to tinggi-1 do
begin
titik:=0;
warna:=getRValue(image3.Canvas.Pixels[i,j]);
if warna<255 then
begin
warna:=clBlack;
titik:=1; end;
Begin for x:=1 to 20 do
for y:=1 to 20 do
begin
stringGrid1.Cells[x,y]:=intToStr(tempData[x,y]);
StringGrid1.Cells[x,y+1]:=IntToStr(tempData[x,1]+tempData[x
,2]+tempData[x,3].
StringGrid1.Cells[x+1,y]:=IntToStr(tempData[1,y]+tempData[2
,y]+tempData[3,y]. end;end;
a. Pembelajaran Vektor
procedure TLVQ.Training2;
var
i,j,k:integer;
epsilon,l,selisih,s,w,dmin1,dmin2:double;
pattern: PPattern;
bobot: PPattern;
bobotterupdate,bobotterupdate2 :PPattern;
bStop:boolean;
listjarakbobot:TList;
jarak:PJarakBobot;
jarak1,jarak2:PJarakBobot;
begin
epsilon := 0.25;
bStop:= false;
currentepoch:=0;
txtStatus.Lines.Add('Training.....');
procedure TLVQ.Training2;
var
i,j,k:integer;
epsilon,l,selisih,s,w,dmin1,dmin2:double;
pattern: PPattern;
bobot: PPattern;
bobotterupdate,bobotterupdate2 :PPattern;
bStop:boolean;
listjarakbobot:TList;
jarak:PJarakBobot;
jarak1,jarak2:PJarakBobot;
begin
epsilon := 0.25;
bStop:= false;
currentepoch:=0;
txtStatus.Lines.Add('Training.....');
//hitung window
w:=0.25;
s := (1-w)/(1+w);
//list jarak bobot
listjarakbobot := TList.Create;
while not bStop do
begin
inc(currentepoch);
txtStatus.Lines.Add('Epoh : '+
inttostr(currentepoch));
//untuk setiap datapembelajaran
for i := 0 to (ListPembelajaran.Count - 1) do
begin
pattern := ListPembelajaran.Items[i];
//hitung jarak tiap pattern dengan tiap data bobot
listjarakbobot.Clear;
for j:= 0 to ListBobot.Count-1 do
bobot := ListBobot.Items[j];
//hitung jarak
l:=0;
for k:= 0 to NumInput-1 do
begin
jarak1 := listjarakbobot.Items[0]; //terdekat pertama
jarak2 := listjarakbobot.Items[1]; //terdekat kedua
dmin1:=jarak1.jarak;
dmin2:=jarak2.jarak;
bobotterupdate := ListBobot.Items[jarak1.idbobot];
bobotterupdate2 := ListBobot.Items[jarak2.idbobot];
//cek apakah masuk window jika masuk hitung bobot
yang baru
if(min(dmin1/dmin2,dmin2/dmin1)>s)then
begin
//jika id user pattern = id user kedua bobot maka
ditambah semua bobot terdekat 1 dan 2
if(pattern.iduser = bobotterupdate.iduser) and
(pattern.iduser = bobotterupdate2.iduser) then
begin
for k:=0 to NumInput -1 do
begin
bobotterupdate^.TandaTangan[k]:=
bobotterupdate^.TandaTangan[k] + epsilon*alpha
*(pattern^.TandaTangan[k]-bobotterupdate^.TandaTangan[k]);
bobotterupdate2^.TandaTangan[k]:=
bobotterupdate2^.TandaTangan[k] + epsilon*alpha
*(pattern^.TandaTangan[k]-bobotterupdate2^.TandaTangan[k]);
end;
end
else
begin
//jika id user pattern sama dengan id user bobot terdekat 1
maka bobot terdekat 1 ditambah sedangkan bobot terdekat 2
dikurangi
if(pattern.iduser = bobotterupdate.iduser)then
begin
for k:=0 to NumInput -1 do
begin
bobotterupdate^.TandaTangan[k]:=
bobotterupdate^.TandaTangan[k] + alpha
*(pattern^.TandaTangan[k]-bobotterupdate^.TandaTangan[k]);
bobotterupdate2^.TandaTangan[k]:=
bobotterupdate2^.TandaTangan[k] - alpha
*(pattern^.TandaTangan[k]-bobotterupdate2^.TandaTangan[k]);
end;
end
else
begin
for k:=0 to NumInput -1 do
begin
bobotterupdate^.TandaTangan[k]:=
bobotterupdate^.TandaTangan[k] - alpha
*(pattern^.TandaTangan[k]-bobotterupdate^.TandaTangan[k]);
bobotterupdate2^.TandaTangan[k]:=
bobotterupdate2^.TandaTangan[k] + alpha
*(pattern^.TandaTangan[k]-bobotterupdate2^.TandaTangan[k]);
Gambar 4.13 Source code Procedure Training_2
b. Pengenalan Tanda Tangan
Gambar 4.14 Cuplikan Source code Pengenalan
4.1.4 Implementasi Algoritma RSA (Riset Shamir Adleman)
a. Pembuatan Kunci Tanda Tangan Digital
Gambar 4.15 Cuplikan Source code Fungsi nilai n
end;
end;
end;
end;
end;
CekKesalahan;
alpha:= alpha*0.95;
if (currentepoch=maxepoch) then
txtStatus.Lines.Add('max epoch tercapai');
if (alpha < targeterror) then
txtStatus.Lines.Add('alpha tercapai');
if (currentepoch=maxepoch) {or (alpha < targeterror)
}then
begin
bStop:=true;
end;
end;
MessageDlg('Training selesai!',mtInformation,[mbOK],0);
end;
LVQthread.kenali(image2.Picture.Bitmap,imgMirip1,imgMirip2,i
mgMirip3);
.
Function getnilain(nilaip,nilaiq : int64):int64;
begin
result := nilaip*nilaiq;
end;
Function getnilaiphi(nilaip,nilaiq : int64):int64;
begin
result := (nilaip-1) * (nilaiq-1);
end;
Gambar 4.16 Cuplikan Source code Fungsi nilai phi
Gambar 4.17 Cuplikan Source code Fungsi Kunci privat d
b. Proses Signing Menggunakan Kunci Publik (Enkripsi)
Gambar 4.18 Cuplikan Source code proses Signing
Function getkunciprivatd(nilaie,nilaiphi : int64):int64;
var
nilaid : int64;
k: integer;
begin
k:=1;
repeat
nilaid:= (1+(k*nilaiphi))div nilaie;
inc(k);
until (((nilaie*nilaid)-1) mod nilaiphi = 0);
result := nilaid;
end;
var
test, s,b64:string;
e,n:tfgint;
stin,ms:integer;
begin
//memecah tiap edit
test := nim.text + '_' + namaorang.text + '_' + Hash.Text;
edit11.Lines.Add(test);
Base10StringToFGInt(edit2.Text, e);//input password e,n
Base10StringToFGInt(edit3.text, n);
RSAEncrypt(test, e, n, test);
edit13.Clear;
ConvertBase256to64(test,b64);//fungsi mengubah 256
edit13.lines.A
dd(b64);
FGIntDestroy(e);
FGIntDestroy(n);
end;
Procedure RSAEncrypt(P : String; Var exp, modb : TFGInt;
Var E : String);
Var
i, j, modbits : longint;
PGInt, temp, zero : TFGInt;
tempstr1, tempstr2, tempstr3 : String;
Begin
Base2StringToFGInt('0', zero);
FGIntToBase2String(modb, tempstr1);
modbits := length(tempstr1);
convertBase256to2(P, tempstr1);
tempstr1 := '111' + tempstr1;
j := modbits - 1;
Gambar 4.19 Cuplikan Source code proses RSAEncrypt
While (length(tempstr1) Mod j) <> 0 Do tempstr1 := '0' +
tempstr1;
j := length(tempstr1) Div (modbits - 1);
tempstr2 := '';
For i := 1 To j Do
Begin // mengubah tiap string ke bentuk ascii
tempstr3 := copy(tempstr1, 1, modbits - 1);
While (copy(tempstr3, 1, 1) = '0') And
(length(tempstr3) > 1) Do delete(tempstr3, 1,
1);
Base2StringToFGInt(tempstr3, PGInt);
delete(tempstr1, 1, modbits - 1);
If tempstr3 = '0' Then FGIntCopy(zero, temp) Else
FGIntMontgomeryModExp(PGInt, exp, modb, temp);
FGIntDestroy(PGInt);
tempstr3 := '';
FGIntToBase2String(temp, tempstr3);
While (length(tempstr3) Mod modbits) <> 0 Do
tempstr3 := '0' + tempstr3;
tempstr2 := tempstr2 + tempstr3;
FGIntdestroy(temp);
End;
While (tempstr2[1] = '0') And (length(tempstr2) > 1)
Do delete(tempstr2, 1, 1);
ConvertBase2To256(tempstr2, E);
FGIntDestroy(zero);
End;
Var
temp, x, a : String;
i, len6 : longint;
g : integer;
trans : Array[0..255] Of String;
Begin
initialize8(trans);
temp := '';
For i := 1 To length(str256) Do temp := temp +
trans[ord(str256[i])];
If (length(temp) Mod 6) = 0 Then a := '' Else
If (length(temp) Mod 6) = 4 Then
Begin
temp := temp + '00';
a := '='
End
Else
Begin
temp := temp + '0000';
a := '==' End;
Var
temp, x, a : String;
i, len6 : longint;
g : integer;
trans : Array[0..255] Of String;
Gambar 4.20 Cuplikan Source code Convert 256 to 64
c. Proses Verifying Menggunakan Kunci Privat (Dekripsi)
procedure Tfrmverifikasi.Button4Click(Sender: TObject);
var
test,b64,nim,nama,hash2:string;
d,n,nilgint:tfgint;
i, x : integer;
begin
Query1:=DMod1.query1;
test:=memo1.text;
nim:='';
nama:='';
hash2:='';
ConvertBase64to256(test,b64);
test:='';
Base10StringToFGInt(edit6.Text, d);
Base10StringToFGInt(edit9.text, n);
RSADecrypt(b64, d, n, Nilgint, Nilgint, Nilgint, Nilgint,
test);// pemanggilan procedure dekripsi RSA
edit11.text:=test;
FGIntDestroy(d);
FGIntDestroy(n);
FGIntDestroy(nilgint);
x:=1;
Begin
initialize8(trans);
temp := '';
For i := 1 To length(str256) Do temp := temp +
trans[ord(str256[i])];
If (length(temp) Mod 6) = 0 Then a := '' Else
If (length(temp) Mod 6) = 4 Then
Begin
temp := temp + '00';
a := '='
End
Else
Begin
temp := temp + '0000';
a := '=='
End;
str64 := '';
len6 := length(temp) Div 6;
For i := 1 To len6 Do
Begin
x := copy(temp, 1, 6);
zeronetochar6(g, x);
str64 := str64 + PGPchr64[g];
delete(temp, 1, 6);
End;
str64 := str64 + a;
End;
Gambar 4.21 Cuplikan Source code Verifiying
Begin
Base2StringToFGInt('0', zero);
FGIntToBase2String(modb, tempstr1);
modbits := length(tempstr1);
convertBase256to2(E, tempstr1);
While copy(tempstr1, 1, 1) = '0' Do delete(tempstr1, 1,
1);
While (length(tempstr1) Mod modbits) <> 0 Do tempstr1 :=
'0' + tempstr1;
If exp.Number = Nil Then
Begin
FGIntModInv(q, p, temp1);
FGIntDestroy(temp1);
FGIntModInv(p, q, temp1);
FGIntDestroy(temp1);
End;
j := length(tempstr1) Div modbits;
tempstr2 := '';
For i := 1 To j Do
Begin
tempstr3 := copy(tempstr1, 1, modbits);
While (copy(tempstr3, 1, 1) = '0') And
(length(tempstr3) > 1) Do delete(tempstr3, 1, 1);
Base2StringToFGInt(tempstr3, EGInt);
delete(tempstr1, 1, modbits);
If tempstr3 = '0' Then FGIntCopy(zero, temp) Else
Begin
If exp.Number <> Nil Then
FGIntMontgomeryModExp(EGInt, exp, modb, temp) Else
Begin
FGIntCopy(temp3, temp1);
FGIntCopy(temp3, temp2);
FGIntAddMod(temp1, temp2, modb, temp);
FGIntDestroy(temp1);
FGIntDestroy(temp2);
End;
End;
Begin
Base2StringToFGInt('0', zero);
FGIntToBase2String(modb, tempstr1);
begin
if test[i]='_' then
x:=x+1
else if x=1 then
nim:=nim+test[i]
else if x=2 then
nama:=nama+test[i]
else if x=3 then
hash2:=hash2+test[i];
end;
nim2.Text:=nim;
edit2.Text:=nama;
edit1.Text:=hash2;
cekverifikasi (nim,nama,hash2);end;
Gambar 4.22 Cuplikan Source code RSADecrypt
modbits := length(tempstr1);
convertBase256to2(E, tempstr1);
While copy(tempstr1, 1, 1) = '0' Do delete(tempstr1, 1,
1);
While (length(tempstr1) Mod modbits) <> 0 Do tempstr1 :=
'0' + tempstr1;
If exp.Number = Nil Then
Begin
FGIntModInv(q, p, temp1);
FGIntDestroy(temp1);
FGIntModInv(p, q, temp1);
FGIntDestroy(temp1);
End;
j := length(tempstr1) Div modbits;
tempstr2 := '';
For i := 1 To j Do
Begin
tempstr3 := copy(tempstr1, 1, modbits);
While (copy(tempstr3, 1, 1) = '0') And
(length(tempstr3) > 1) Do delete(tempstr3, 1, 1);
Base2StringToFGInt(tempstr3, EGInt);
delete(tempstr1, 1, modbits);
If tempstr3 = '0' Then FGIntCopy(zero, temp) Else
Begin
If exp.Number <> Nil Then
FGIntMontgomeryModExp(EGInt, exp, modb, temp) Else
Begin
FGIntCopy(temp3, temp1);
FGIntCopy(temp3, temp2);
FGIntAddMod(temp1, temp2, modb, temp);
FGIntDestroy(temp1);
FGIntDestroy(temp2);
End;
End;
FGIntDestroy(EGInt);
tempstr3 := '';
FGIntToBase2String(temp, tempstr3);
While (length(tempstr3) Mod (modbits - 1)) <> 0 Do
tempstr3 := '0' + tempstr3;
tempstr2 := tempstr2 + tempstr3;
FGIntdestroy(temp);
End;
If exp.Number = Nil Then
While (Not (copy(tempstr2, 1, 3) = '111')) And
(length(tempstr2) > 3) Do delete(tempstr2, 1, 1);
delete(tempstr2, 1, 3);
ConvertBase2To256(tempstr2, D);
FGIntDestroy(zero);
End;
Gambar 4.23 Cuplikan Source code Convert 64 to 256
4.2 Hasil Uji Coba Sistem
Pada subbab ini akan dilakukan pembahasan mengenai pengujian yang
telah dilakukan perangkat lunak. Uji coba dalam hal ini dibagi menjadi 2 yaitu
pengujian pembelajaran tanda tangan manual LVQ dan pengujian signing
verifikasi RSA.
Procedure PGPConvertBase64to256(str64 : String; Var str256 :
String);
Var
temp, x : String;
i, j, len8 : longint;
g : char;
trans : Array[0..255] Of String;
Begin
initialize6PGP(trans);
temp := '';
str256 := '';
If str64[length(str64) - 1] = '=' Then j := 2 Else
If str64[length(str64)] = '=' Then j := 1 Else j := 0;
For i := 1 To (length(str64) - j) Do temp := temp +
trans[ord(str64[i])];
If j <> 0 Then delete(temp, length(temp) - 2 * j + 1, 2 *
j);
len8 := length(temp) Div 8;
For i := 1 To len8 Do
Begin
x := copy(temp, 1, 8);
zeronetochar8(g, x);
str256 := str256 + g;
delete(temp, 1, 8);
End; End;
4.2.1 Uji Coba Pembelajaran LVQ
a. Tabel Uji Coba Dengan Nilai Max Epoch 10, Nilai Target Erornya 0,1, dan
alpha 0,01 - 0,09 (Learning rate < target error)
Tabel 4.1 Uji Coba Dengan Nilai Max Epoch 10 Dan Nilai Target Erornya 0,1
Learning
Rate
Max
Epoch
Target
Error
Waktu
Training
(milidetik)
Konvergen Persentase
True False True False
0,01 10 0,1 52775 12 27 31% 69%
0,02 10 0,1 170588 17 22 44% 56%
0,03 10 0,1 99388 17 22 44% 56%
0,04 10 0,1 81448 19 20 49% 51%
0,05 10 0,1 201912 13 26 33% 67%
0,06 10 0,1 163817 15 24 38% 62%
0,07 10 0,1 191928 17 22 44% 56%
0,08 10 0,1 240912 21 18 54% 46%
0,09 10 0,1 67782 15 24 38% 62%
b. Tabel Uji Coba Dengan Nilai Max Epoch 100, Nilai Target Erornya 0,1, dan
alpha 0,01 - 0,09 (Learning rate < target error)
Tabel 4.2 Uji Coba Dengan Nilai Max Epoch 100, Nilai Target Erornya 0,1
Learning
Rate
Max
Epoch
Target
Error
Waktu
Training
(milidetik)
Konvergen Persentase
True False True False
0,01 100 0,1 505942 12 27 31% 69%
0,02 100 0,1 543507 18 21 46% 54%
0,03 100 0,1 626219 18 21 46% 54%
0,04 100 0,1 721021 27 12 69% 31%
0,05 100 0,1 550527 18 21 46% 54%
0,06 100 0,1 805589 24 15 62% 38%
0,07 100 0,1 4535449 21 18 54% 46%
0,08 100 0,1 603755 29 10 74% 26%
0,09 100 0,1 660804 26 13 67% 33%
Berdasarkan hasil uji coba di atas, dimana nilai target errornya lebih besar
dari learning rate didapatkan hasil untuk maksimal epoh 10 adalah 47 % untuk
hasil kebenaranya dengan rata-rata waktu yang dibutuhkan 141 detik sedangkan
untuk epoh 100 dengan target error 0,1 dibutuhkan waktu 1061 detik dengan
persentase untuk kebenarannya 55%. Tabel 4.1 dan 4.2 dapat direpresentasikan
dalam bentuk grafik yang ditunjukkan pada gambar 4.24
1
2
3
4
5
6
7
8
9
10
Nilai learning rate
Waktu ( MiliDetik)
0
1000000
2000000
3000000
4000000
5000000
Nilai learning rate Max Epoch 10 Target Error
Waktu ( MiliDetik) Max Epoch 100 Waktu ( MiliDetik)
Gambar 4.24 Grafik pembelajaran Maxepoch 10 dan 100, target error 0,1, dan
alpha 0,010,09
c. Tabel Uji Coba Dengan Nilai Max Epoch 100, Nilai Target Erornya 0,01, dan
alpha 0,01 - 0,09 (Learning Rate = Target Error)
Tabel 4.3 Uji Coba Dengan Nilai Max Epoch 1000, Nilai Target Erornya 0,01
Learning
Rate
Max
Epoch
Target
Error
Waktu
Training
(milidetik)
Konvergen Persentase
True False True False
0,01 1000 0,01 1814735 12 27 31% 69%
0,02 1000 0,01 1842250 18 21 46% 54%
0,03 1000 0,01 2002641 18 21 46% 54%
0,04 1000 0,01 1835375 27 12 69% 31%
0,05 1000 0,01 2218328 18 21 46% 54%
0,06 1000 0,01 4470984 24 15 62% 38%
0,07 1000 0,01 1847641 21 18 54% 46%
0,08 1000 0,01 1989578 29 10 74% 26%
0,09 1000 0,01 2869453 26 13 67% 33%
Dari tabel 4.3 diperoleh nilai minimal kesalahan pada learning rate 0,08 yaitu
total kesalahan 10 dari 39 data dengan nilai presentase kebenaran 74 %. Rata-rata
waktu yang ditempuh untuk melalukan proses training dengan epoch 1000 dan
target error 0,01 adalah 2321 detik dengan persentase kebenaran 55%. Tabel 4.3
dapat direpresentasikan dalam bentuk grafik dibawah ini.
1
2
3
4
5
6
7
8
9
Nilai learning rate
0
1000000
2000000
3000000
4000000
5000000
Nilai learning rate Waktu ( MiliDetik) Training 10
Gambar 4.25 Grafik pembelajaran Maxepoch 1000, target error 0,01
c. Tabel Uji Coba Dengan Nilai Max Epoch 10, 100, dan 1000, Target Erornya
0,01 dan Alpha 0,10,9 (Learning rate > target error)
Tabel 4.4 Uji Coba Dengan Nilai Max Epoch 10, Nilai Target Erornya 0,01
Learning
Rate
Max
Epoch
Target
Error
Waktu
Training
(milidetik)
Konvergen Persentase
True False True False
0,1 10 0,01 73399 13 26 33 % 67 %
0,2 10 0,01 63462 18 21 46 % 54 %
0,3 10 0,01 58469 6 33 15 % 85 %
0,4 10 0,01 56519 9 30 23 % 77 %
0,5 10 0,01 111260 3 36 8 % 92 %
0,6 10 0,01 60388 3 36 8 % 92 %
0,7 10 0,01 100511 3 36 8 % 92 %
0,8 10 0,01 77189 3 36 8 % 92 %
0,9 10 0,01 92556 3 36 8 % 92 %
Tabel 4.5 Uji Coba Dengan Nilai Max Epoch 100, Nilai Target Erornya 0,01
Learning
Rate
Max
Epoch
Target
Error
Waktu
Training
(milidetik)
Konvergen Persentase
True False True False
0,1 100 0,01 411375 23 16 58 % 42 %
0,2 100 0,01 369359 21 18 53 % 47 %
0,3 100 0,01 336500 24 15 61 % 39 %
0,4 100 0,01 338312 20 19 51 % 49 %
0,5 100 0,01 525031 12 27 31 % 69 %
0,6 100 0,01 341953 9 30 23 % 77 %
0,7 100 0,01 322016 7 32 17 % 68 %
0,8 100 0,01 369516 6 33 15 % 85 %
0,9 100 0,01 444062 6 33 15 % 85 %
Tabel 4.6 Uji Coba Dengan Nilai Max Epoch 1000, Nilai Target Erornya 0,01
Learning
Rate
Max
Epoch
Target
Error
Waktu
Training
(milidetik)
Konvergen Persentase
True False True False
0,1 1000 0,01 4230266 23 16 60% 40%
0,2 1000 0,01 4937094 21 18 54% 46%
0,3 1000 0,01 4955610 25 14 64% 36%
0,4 1000 0,01 15356250 20 19 51% 49%
0,5 1000 0,01 10182500 12 27 31% 69%
0,6 1000 0,01 2373984 10 29 26% 74%
0,7 1000 0,01 2483344 7 32 18% 82%
0,8 1000 0,01 2504422 6 33 15% 85%
0,9 1000 0,01 2409516 6 33 15% 85%
1
2
3
4
5
6
7
8
9
Nilai learning rate
0
5000000
10000000
15000000
20000000
Nilai learning rate Waktu ( MiliDetik) Training
Gambar 4.26 Grafik pembelajaran Maxepoch 1000, target error 0,01
Dari hasil uji coba pada tabel 4.4, 4.5, 4.6 terlihat jelas bahwa semakin
banyak epoch yang diproses makaa semakin sedikit tingkat kesalahannya terbukti
pada epoch 1000 dengan learning rate 0,3 dengan waktu pembelajaran 4955610
milidetik mendapatkan tingkat kesalahan 14 dari 39 data sedangankan pada epoch
10 dan 100 tingkat kesalahannya adalah 33 dan 15. Ratarata waktu yang
ditempuh untuk epoch 10 adalah 67 detik presentase tingkat kesalahan 82 %,
untuk epoch 100 rata-rata waktu yang ditempuh 384 detik persentase tingkat
kesalahan 62 %. Dengan meningkatkan jumlah maksimal epoch menjadi 1000
maka rata-rata waktu yang ditempuh 5492 milidetik dengan persentase tingkat
kesalahan 63 %.
4.2.2 Uji Coba RSA
Pengujian tanda tangan digital menggunakan algoritma RSA dilakukan 5
kali untuk mengetahui kebenaran tanda tangan dan apakah tanda tangan tersebut
telah terdaftar apa belum. Form Signig pada gambar 4.6 diatas digunakan untuk
mengenali tanda tangan seseorang yang sudah terdaftar selanjutnya enkripsi data
tersebut menggunakan kunci n dan kunci publik e. Untuk form verifyng digunakan
untuk mengdeskripsikan file yang berisi chiper text dari hasil enkripsi menjadi
plain text menggunakan kunci privat d dan n apakah data tersebut benar-benar
terdaftar untuk lebih jelas hasil dari enkripsi dan dekripsi tersebut berikut
pemaparan hasil dalam bentuk tabel 4.7.
Tabel 4.7 Tabel Uji Coba RSA
Uji
Ke
Ukuran
File
Byte
Nilai
n
Kunci
e
Kunci
d
Waktu
signing
Waktu
Verfiyng
Hasil
1 68 962163043 65537 312836937 47 49
1234567890_brian_vNQq/D+olsXhl/jmzfyB+7aoStW
=
2 62 818834363 65537 409740401 31 65
90897_ageng_SyZnD8xK8mfTBRmWKiwPZiGc+dG
=
3 58 261888749 65537 128838785 15 49 66565_agis_cDru/mbXdSUqcq0NiR2mOIotNoM=
4 58 984758849 65537 317779901 16 50 12345_adi_2PVnm08iGIYEGqdyTobbH42JOlW=
5 64 135324661 65537 30067377 16 65
234234_dirga_MvnRlTkGumtxMjhGsOCAsCqSVmy
=
6 61 400169923 65537 48518441 31 49 3234414_doni_Haw1eL6QsOM3xxSjqlY7QfQU3s4=
7 64 187821551 65537 64062905 16 81
12345678_mel_S5z547M2sT0opCaXCXUsYLA268c
=
8 68 1064547271 65537 711292337 79 49
667574747_meynar_CsmjEvnxO2Cap1/sKa9kVoyvO
Va=
9 62 1036342271 65537 508546961 31 34
53522525_nanda_zUa6uOGBsfBjqpY6u5TqBV5DnC
p=
10 65 294936311 65537 94025729 31 65
123456789_rey_cvCFCGhWwTaVWukMEj0U+reLO
fu=
11 65 524697031 65537 204331873 15 34 1234567_vildan_zI8oiOg32im3PCN7nBKvPamiI8S=
12 62 960553537 65537 744493265 16 81 123456_wulan_DZHtJvGx7P5SP4jUc7bkvzhZTRJ=
13 61 499539433 65537 372812901 16 65 1234_yudha_7chvJjb9g8bFupkDQHm5wfFR7xJ=
BAB V
KESIMPULAN DAN SARAN
5.1 Kesimpulan
Setelah melakukan uji coba sistem maka dapat disimpulkan :
- Tingkat keberhasilan dari jaringan saraf tiruan LVQ dipengaruhi oleh 3
inputan yaitu maksimal epoch (set training jaringan), learning rate (laju
pembelajaran), serta target error. Semakin besar nilai maksimal epoch maka
semakin sedikit tingkat kesalahan dalam pembelajaran dengan menambah
pula nilai learning rate-nya dan meminimalkan target errornya.
- Authentifikasi tanda tangan manual dengan jaringan saraf tiruan dan tanda
tangan digital dengan algoritma RSA mengahsilkan tingkat keberhasilan
sukses sebesar 100 % untuk tanda tangan digital, dan 85 % untuk tanda
tangan manual dengan pembelajaran menggunakan nilai max epoch 100,
nilai Learning rate 0,1-0,9 dan nilai target error 0,01.
5.2 Saran
1. Menambah jumlah percobaan di edalam pengenalan tanda tangan manual dengan
kelas dan jumlah data vector yang berbeda agar didapatkan keakuratan nilai
persentase.
2. Mencoba menerapkan metode jaringan saraf tiruan LVQ dan metode algoritma
RSA dengan kasus yang lainnya.
DAFTAR PUSTAKA
Ahmad, Balaza dan firdausy kartika. 2005. Teknik Pengolahan Citra Digital
Menggunakan Delphi. Yogyakarta: Andi Publishing.
Alisher, 2005. Biometric Cryptosystem Using Online Signatures.
http://www.google.co.id/#hl=id&q=biometric+alisher+2005, 17 januari
2010.
Anonymous. http://www.wikipedia.org/signature recognition.
Azizah, Rizqina. 2006. Analisis Tiga metode Ekstraksi ciri Pada Pola Tanda
Tangan. Surabaya: Institut Teknologi Sepuluh Nopember.
Bahri,S, Kusnassriyanto dan Siachriyanto wawan. 2008. Teknik Pemrograman
Delphi Edisi Revisi. Bandung: Informatika.
Bahreisy, H. Salim. 1984. Tarjamah Riadhus Shalihin. Bandung: P.T Almaarif.
Baharsyah, M. Pramana. 2006 Undeniable Signature.
http://www.google.co.id/search?hl=id&q=tanda+tangan+digital+baharsya
h+2006. 17 januari 2010.
DPR RI, 2008. Undang-Undang Republik Indonesia no 11 tahun 2008.
www.djkn.depkeu.go.id/index.php/20080529636/Undang-undang-
nomor_11_tahun 2008.html.auntizatio-44219.pdf.
Duda, P. Hart and D.Stork. LVQ Pattern Classification. John Wiley and sony inc.
Fairhurst, 2003. Biometrics for Secure Authentication .
http://www.google.co.id/#hl=id&q=contoh+biometric+fairhurst+2003. 17
januari 2010
Gonzalez, R.C, and woods,RS. 2002. Digital Image Processing, 2
nd
ed., Prentice
Hall, Upper Sadle river,Nj.
Gultom, Bernadus Surya Perdana. 2006. Analisis Kinerja Algoritma RSA dan
Pengacakan Citra pada Image enggunakan Transformasi wavelet.
Bandung: STT Telkom.
Kadir, Abdul. 2003. Pengenalan Sistem Informasi. Yogyakarta: Andi Offset.
Kusuma, Dewi. 2003. Artificial Intelegence (Teknik dan Aplikasinya).
Yogyakarta: Graha Ilmu.
KusumoPutro, Benyamin. 2001. Pengenalan Huruf Tulisan Menggunakan
Ekstraksi Ciri Berbasis Fuzzy dan Jaringan Syaraf Tiruan. Jurnal Ilmu
Komputer dan Teknologi Informasi.
Kusuma, Dewi, S. 2004. Membangun jaringan saraf tiruan menggunakan matlab
dan excel link. Yogyakarta: Graha Ilmu.
Kurniawa, Agus dan Purnomo Hery. 2006. Supervised Pada Neural Networks dan
Aplikasinya. Yogyakarta: Graha Ilmu.
Kusumawati, Ririen. 2007.Artificial Intelligence Menyamai Kecerdasan Buatan
Illahi?. Malang: UIN-Malang Press.
Liman, J. (2005). Feedforward Neural Network. www.ukrida.co.id, diakses
tanggal 12 November 2009.
Munir, Rinaldi.. 2004. Pengolahan Citra Digital dengan Pendekatan Algoritmik.
Informatika Bandung.
Munir, Rinaldi. 2006. Kriptografi. Bandung: Informatika Bandung.
Ratna, M. 2005. Studi dan Implementasi Cramer Shoup untuk Tanda Tangan
Dijital.
http://www.google.co.id/search?hl=id&q=tanda+tangan+digital+ratna+20
05. 17 Januari 2010
Susetyoko, R., Iman, B.N dan Harsono, T. 2005. LVQ Neural Network Dengan
Pembangkitan Variabel Random Uniform Untuk Vektor Training pada
Pengenalan Tanda Tangan. Surabaya: PENS-Institu Teknologi Sepuluh
Nopember.
Shihab, M. Quraish 1994. Lentera hati : kisah dan hikmah .Bandung: Mizan.
Winarko, Edi. 2006. Perancangan Database Dengan Power Designer 6.32.
Jakarta: Prestasi Pustaka.
Zainal. 2002. Aplikasi Neural Network Pada Pengenalan Pola Tanda Tangan.
Politeknik elektronika Negeri Surabaya.
http://reference.kfpum.edu.sa/content/v/lvq_pak_the_Learning_vector_www.wiki
pedia.org/signature.
http://tedi heriyanto.net/papers/jst.htm informatika.org/~rinaldi/kriptografi/2006-
2007/makalah-makalah/makalah-025.pdf.