LAPORAN TUGAS AKHIR SIMULASI KUNCI ELEKTRIK DENGAN ENKRIPSI MELALUI BLUETOOTH PADA PONSEL Diajukan Guna Melengkapi Salah Satu Persyaratan Untuk Memperoleh Gelar Sarjana ( S1 ) Peminatan Teknik Telekomunikasi
Disusun Oleh : Audi Nantan Nanggala ( 01403 – 039 )
JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNOLOGI INDUSTRI UNIVERSITAS MERCU BUANA JAKARTA
2010
LEMBAR PENGESAHAN
LAPORAN TUGAS AKHIR
SIMULASI KUNCI ELEKTRIK DENGAN ENKRIPSI MELALUI BLUETOOTH PADA PONSEL
Disusun Oleh :
Nama : Audi Nantan Nanggala Nim : ( 01403 – 039 )
Mengetahui Pembimbing Tugas Akhir
Dr. Ing Mudrik Alaydrus
LEMBAR PENGESAHAN
LAPORAN TUGAS AKHIR
SIMULASI KUNCI ELEKTRIK DENGAN ENKRIPSI MELALUI BLUETOOTH PADA PONSEL
Nama : Audi Nantan Nanggala Nim : ( 01403 – 039 )
Disetujui dan disahkan oleh :
Ketua Jurusan Teknik Elektro
Yudhi Gunardi ST. MT
Dosen Pembimbing
Dr. Ing Mudrik Alaydrus
ABSTRAK
Saat ini fasilitas yang disediakan oleh ponsel sangat beragam. Mulai dari telepon, SMS, kamera, music player, semuanya dijadikan satu. Tentunya ponsel juga dapat dijadikan sebagai kunci elektronik menggantikan kunci analog yang ada saat ini. Biasanya untuk membuka sebuah kunci pintu seseorang harus menggunakan sebuah anak kunci, jadi untuk mengakses banyak pintu harus memiliki banyak anak kunci yang berbeda-beda. Namun jika ponsel dijadikan sebagai kunci elektronik yang menerapkan access control tentunya semua anak kunci tersebut tidak dibutuhkan lagi, cukup dengan satu ponsel dapat membuka banyak kunci. Pada skripsi ini, dirancang simulasi kunci elektronik yang menggunakan ponsel sebagai remote kontrol, dan komputer sebagai pusat pengontrolnya. Komunikasi antara ponsel dan komputer menggunakan bluetooth. Sedangkan yang berfungsi sebagai kuncinya berupa simulasi lampu LED yang dihubungkan melalui parallel port komputer. Sistem kunci elektronik ini menerapkan Access Control dengan menggunakan enkripsi RC4 dan Hashing MD5. Rancangan ini dapat menyalakan/ memadamkan lampu LED yang berfungsi sebagai simulasi kunci elektronik dengan menggunakan ponsel, dan hanya orang-orang yang telah terdaftar serta memiliki hak akses saja yang bisa menyalakan/ memadamkan lampu LED tersebut. Modul-modul rancangan ini dibuat dengan menggunakan Jcreator Pro 3.00 dan basis data MySQL, dengan beberapa library tambahan. Library yang dibutuhkan adalah mysql-connectorjava-3.0.9, BlueCove, Bluelet-Benhui. Dan Ponsel yang digunakan harus mendukung Java MIDP 2.0 dan JSR-82.
Kata Kunci:
Kunci Elektronik, BTKey, Bluetooth, Ponsel, Parallel Port, Lampu LED, Access Control, Hashing MD5, Enkripsi RC4, mysql-connector-java-3.0.9, BlueCove, Bluelet-Benhui, Java MIDP 2.0, JSR-82.
KATA PENGANTAR
Puji syukur kepada Tuhan Yang Maha Esa, atas berkat dan rahmat-Nya, penulis dapat menyelesaikan skripsi ini dengan baik dan sesuai dengan batas waktu yang telah ditentukan. Penyusunan skripsi dengan judul: “Simulasi Kunci Elektrik dengan Enkripsi Melalui Bluetooth pada Ponsel” ini merupakan salah satu syarat untuk menempuh sidang sarjana guna mendapatkan gelar Sarjana Teknik Fakultas Teknologi Industri Universitas Mercu Buana. Pada kesempatan ini, penulis ingin menyampaikan rasa terima kasih sebesar-besarnya kepada: 1.
Bapak Ing Mudrik alaydrus pembimbing pertama dalam penulisan skripsi ini yang telah bersedia meluangkan waktu untuk memberikan banyak pengarahan, bimbingan, dan masukan yang sangat berguna bagi penyelesaian skripsi ini.
2.
Bapak Yudhi Gunardi program studi Teknik Elektro Fakultas Teknologi Industri sebagai koordonator Tugas Akhir.
3.
Bapak dan Ibu Dosen serta para karyawan Fakultas Teknologi Industri baik secara langsung dan tidak langsung telah membantu penulis dalam menyelesaikan skripsi ini.
4.
Orang tua yang telah memberikan dukungan secara moril dan material kepada penulis. Dukungan, motifasi, bimbingan, pengajaran yang paling besar yang penulis dapatkan selama ini adalah dari kedua orang tua
penulis. Untuk itu skripsi ini khusus penulis persembahkan kepada kedua orang tua penulis. 5.
Nuril yang juga mengambil skripsi dengan topik aplikasi bluetooth yang telah mengajarkan cara penggunaan library Bluecove.
6.
Rekan-rekan seperjuangan Teknik Elektro terutama angkatan 2003 yang telah memberikan dukungan sepenuhnya kepada penulis.
7.
Seluruh pihak yang telah memberikan pertisipasinya dalam penyusunan skripsi ini yang tidak mungkin dapat penulis sebutkan namanya satu persatu. Penulis menyadari masih banyak kekurangan yang terdapat dalam
penulisan skripsi ini karena keterbatasan waktu, tenaga, dan kemampuan penulis. Oleh karena itu, dengan kerendahan hati penulis sangat menghargai kritik dan saran demi kesempurnaan skripsi ini. Akhir kata, semoga skripsi ini dapat bermanfaat bagi pihak-pihak yang membutuhkan.
Jakarta, Juli 2010
Penulis
DAFTAR ISI HALAMAN JUDUL ..............................................................................................i LEMBAR PERNYATAAN ..................................................................................ii ABSTRAK ............................................................................................................iv KATA PENGANTAR ...........................................................................................v DAFTAR ISI.......................................................................................................viii DAFTAR LAMPIRAN .......................................................................................xi BAB I PENDAHULUAN ......................................................................................1 1.1. Latar Belakang .........................................................................................1 1.2. Rumusan Rancangan ................................................................................3 1.3. Batasan Rancangan ..................................................................................4 1.4. Spesifikasi Rancangan .............................................................................4 1.5. Tujuan Tugas Akhir .................................................................................5 BAB II LANDASAN TEORITIK ........................................................................8 2.1. Sistem yang Dirancang ..............................................................................8 2.1.1 Bluetooth .........................................................................................8 2.1.1.1 Protokol Bluetooth.............................................................10 2.1.1.2 KeamananBluetooth...........................................................13 2.1.1.3 Penerapan Bluetooth pada Sistem yang Dirancang ..............................................................16 2.1.1.4 Java API Untuk Teknologi Bluetooth (JSR-82) .........................................................................17 2.1.2 AlgoritmaMD5...............................................................................17 2.1.2.1 Langkah–Langkah Algoritma MD5...................................18 2.1.2.2 FungsiKompresi MD5........................................................23 2.1.3 AlgoritmaRC4................................................................................24 2.1.3.1 Inisialisasi S-Box...............................................................25 2.1.3.2 Pembangkit Stream............................................................26 2.1.4 Keamanan Sistem yang Dirancang................................................28 2.1.5 Pararel Port .................................................................................. 30 2.2. Modul yang Dirancang ........................................................................... 32 2.2.1 Modul Anak Kunci Bluetooth (AKB) ...........................................33 2.2.1.1 Pengiriman Perintah Terenkripsi untuk Membuka/ Menutup GKB dari AKB kepada GKB ......................................................................33 2.2.1.2 Melihat History Penggunaan
Aplikasi.............................................................................. 35 2.2.2 Modul Kontrol Kunci Bluetooth (KKB)........................................35 2.2.2.1 Pendaftaran Calon Pengguna............................................. 36 2.2.2.2 Penerimaan Perintah Terenkripsi untuk Membuka/ Menutup Kunci yang dikirimkan AKB kepada KKB ................................. 36 2.2.2.3 Pencatatan History Setiap Pengaksesan yang Terjadi dan Pengiriman Catatan Tersebut kepada AKB ................................................................................ 38 2.2.3 Modul Gembok Kunci Bluetooth (GKB).......................................38 BAB III RANCANGAN DAN PEMBUATAN ................................................ 39 3.1 Perancangan Sistem................... ............................................................. 39 3.1.1 Perancangan Blok Diagram............................................................39 3.1.2 Perancangan Modul Anak Kunci Bluetooth. 40 3.1.2.1 Perancangan Menu Anak Kunci Bluetooth.........................40 3.1.2.2 Rancangan Laporan, Pesan Kesalahan dan Error Handling Anak Kunci Bluetooth .................... 41 3.1.2.3 Rancangan Tampilan Aplikasi Anak Kunci Bluetooth ............................................................... 43 3.1.3 Perancangan Modul Kontrol Kunci Bluetooth (KKB) ...........................................................................44 3.1.3.1 Rancangan Menu Kontrol Kunci Bluetooth ........................................................................44 3.1.3.2 Rancangan Basis Data Kontrol Kunci Bluetooth ...........................................................................46 3.1.3.3 Rancangan Tampilan Kontrol Kunci Bluetooth ...........................................................................47 3.1.4 Perancangan Modul Gembok Kunci Bluetooth ..................................................................................... 49 3.2 Pembuatan Sistem..................................................................................... 50 3.2.1 Pembuatan Modul Anak Kunci Bluetooth ................................. 50 3.2.2 Pembuatan Modul Kontrol Kunci Bluetooth............................ 53 3.2.3 Pembuatan Modul Gembok Kunci Bluetooth................................62 BAB IV PENGUJIAN ........................................................................................64 4.1 Cara Pengujian........................................................................................... 66 4.1.1 Metode Pengujian......................................................................... 66 4.1.2 Perangkat Pengujian.................................................................... 67 4.2 Hasil Pengujian...................................................................................... 67
4.3 Pembahasan............................................................................................... 68 BAB V PENUTUP ............................................................................................. 66 5.1 Kesimpulan................................................................................................70 5.2 Saran.......................................................................................................... 71 DAFTAR PUSTAKA ..........................................................................................72 LAMPIRAN ........................................................................................................ 73 DAFTAR RIWAYAT HIDUP ......................................................................... 136
DAFTAR LAMPIRAN Lampiran 1
MD5 .................................................................................. 73
Lampiran 2
Algoritma RC4 .................................................................. 77
Lampiran 3
Parallel Port ...................................................................... 78
Lampiran 4
Block Diagram Rancangan Kunci Elektronik Melalui Bluetooth pada Ponsel................................................................................. 79
Lampiran 5
Rancangan Tampilan Aplikasi Anak Kunci Bluetooth ................................................................ 81
Lampiran 6
Spesifikasi Tabel Aplikasi Kontrol Kunci Bluetooth ................................................................. 87
Lampiran 7
Rancangan Tampilan Aplikasi Kontrol Kunci Bluetooth ................................................................. 88
Lampiran 8
Rangkaian Simulasi Gembok Kunci Bluetooth ............................................................................ 90
Lampiran 9
Hasil Pengujian ................................................................. 91
Lampiran 10
Tampilan Aplikasi Anak Kunci Bluetooth......................... 91
Lampiran 11
Tampilan Aplikasi Kontrol Kunci Bluetooth ............................................................................ 95
Lampiran 12
Referensi Dari Internet ...................................................... 97
Lampiran 13
Listing Program.................................................................. 105
Lampiran 14
Manual Penggunaan program............................................. 129
BAB I PENDAHULUAN
1.1
Latar Belakang Saat ini setiap orang tidak terlepas dari ponsel sebagai sarana
telekomunikasi mereka, terutama bagi mereka yang bermobilitas tinggi. Awalnya fungsi
ponsel
hanya
sebagai
alat
komunikasi
telepon,
tapi
karena
perkembangannya sangat cepat maka sekarang ponsel bukan sekedar alat komunikasi saja. Ponsel saat ini sudah dipadukan dengan Pocket PC, kamera digital, dan perangkat digital lainnya, sehingga ponsel saat ini semakin pintar dan disebut smartphone. Layaknya sebuah komputer, ponsel-ponsel terbaru saat ini memiliki banyak aplikasi dan aplikasi tersebut dapat ditambahkan sesuai dengan kebutuhan. Aplikasi tersebut seperti game, pemutar musik dan video, kamus, pengolah gambar, penjelajah internet, chatting, dan berbagai aplikasi lainnya. Ponsel juga dilengkapi dengan infra merah dan bluetooth yang digunakan untuk melakukan transmisi data jarak dekat dengan peralatan-peralatan nirkabel lainnya. Bluetooth adalah suatu teknologi radio jarak pendek yang memungkinkan konektivitas tanpa kabel antara perangkat yang bersifat mobile. Namun seperti diketahui koneksi nirkabel rentan tehadap sistem keamanannya demikian pula dengan bluetooth, untuk itu aplikasi yang menggunakan bluetooth harus memiliki sistem keamanan tambahan, seperti menggunakan enkripsi RC4 dan hashing MD5.
Salah satu aplikasi yang dapat diterapkan pada ponsel berfasilitas bluetooth adalah menggunakannya sebagai perangkat pengakses kunci elektrik secara nirkabel. Kunci elektrik yang dimaksud adalah suatu kunci pintu yang untuk membuka atau menguncinya tidak memerlukan anak kunci tapi dengan menggunakan perintah yang disampaikan secara digital. Perintah yang disampaikan secara digital tersebut dapat berupa sensor infra red, kode yang dimasukan melalui papan ketik, sensor retina mata, sensor sidik jari, atau sensor suara. Kunci elektrik biasanya digunakan untuk mengunci sesuatu yang penggunaannya dibatasi, jadi hanya orang-orang tertentu yang mempunyai hak akses. Sebagai contohnya kunci elektrik digunakan pada pintu-pintu gedung yang memerlukan keamanan tingkat tinggi, pada ruangan yang hanya orang tertentu saja boleh masuk seperti ruang pusat kendali jaringan komputer, pada deposit box bank, atau bisa juga pada locker-locker karyawan. Sehingga kunci elektrik yang baik harus memiliki sistem pengontrolan akses yang terjamin keamanannya, dan juga harus memiliki catatan terhadap semua pengaksesan yang terjadi pada kunci elektrik tersebut. Catatan tersebut dapat digunakan untuk pelacakan jika diperlukan. Pada rancangan ini akan dibuat kunci elektrik yang untuk mengaksesnya menggunakan ponsel berfasilitas bluetooth. Sebenarnya ada banyak cara yang dapat digunakan untuk mengakses kunci elektrik, namun pada rancangan ini memilih ponsel berfasilitas bluetooth karena beberapa pertimbangan seperti: ponsel merupakan peralatan yang sudah sangat umum digunakan jadi sangat
memungkinkan jika nantinya ponsel dapat menggantikan peran anak kunci yang biasanya digunakan. Koneksi untuk pengaksesannya menggunakan bluetooth karena penggunaan teknologi bluetooth tidak melalui operator telekomunikasi sehingga bersifat gratis, berbeda dengan SMS atau telepon.
1.2
Rumusan Rancangan Secara garis besar cara kerja Kunci Elektrik yang akan dirancang tersebut
adalah sebagai berikut: Pertama-tama pada ponsel yang telah diinstal aplikasi akan mengirimkan perintah ke komputer melalui bluetooth untuk membuka kunci. Perintah yang dikirimkan tersebut berupa kombinasi kata sandi, nomor kunci yang akan dibuka dan identitas pemakai. Identitas pemakai tersebut berupa nomor Bluetooth. Perintah yang diterima oleh komputer berupa kata sandi, nomor kunci yang akan dibuka, dan identitas pemakai akan dibandingkan dengan basis data yang ada pada komputer. Jika kata sandi dan identitas pemakai sesuai dengan basis data yang ada dan memiliki hak untuk mengakses maka komputer akan membuka kunci yang bersangkutan. Rancangan ini juga akan mencatat semua pengaksesan yang terjadi pada kunci elektrik tersebut ke dalam basis data sehingga jika data-data pengaksesan kunci elektrik tersebut diperlukan maka dapat dilakukan pelacakan. Catatan tersebut berupa siapa yang melakukan pengaksesan dan kapan pengaksesan dilakukan. Selain itu kunci elektrik yang dirancang bukan hanya satu pengontrol
(ponsel) untuk mengakses satu buah kunci, tapi satu pengontrol dapat mengakses beberapa kunci, jadi kunci elektrik ini bersifat paralel.
1.3
Batasan Rancangan Perancangan kunci elektrik ini akan dibatasi oleh beberapa hal yaitu: a. Pesan dikirimkan dari ponsel ke komputer menggunakan bluetooth. Sehingga ponsel yang digunakan harus mendukung Java yang mendukung JSR82 seperti Nokia 6200 yang menggunakan sistem operasi Symbian OS 7.0s b. Terdapat 3 buah kunci yang bersifat paralel. a. Ada pembatasan akses, misalkan: user A hanya dapat mengakses kunci 1 dan 2, user B dapat mengakses kunci 2 dan 3, dan user C hanya dapat mengakses kunci 1 saja. Selain itu juga dapat dibatasi waktu penggunaannya. Pembatasan akses tersebut dapat dikontrol melalui Komputer. c. Terdapat catatan terhadap setiap pengaksesan yang terjadi. Pada penerapannya komputer sebaiknya dilengkapi dengan energi cadangan seperti mesin diesel untuk berjaga-jaga bila listrik PLN padam.
1.4
Spesifikasi Rancangan Kunci Elektrik yang dibuat terdiri atas tiga buah modul, yaitu modul
Anak Kunci Bluetooth, modul Kontrol Kunci Bluetooth, dan modul Gembok Kunci Bluetooth. Berikut ini spesifikasi dari modul-modul tersebut :
a. Modul Anak Kunci Bluetooth. Modul ini merupakan sebuah aplikasi yang akan diinstal pada ponsel. Pada aplikasi ini terdapat menu Open/ Close, History, Help, About dan Exit. Fungsi utama dari modul ini adalah mengirimkan perintah melalui bluetooth kepada komputer untuk membuka kunci.
b. Modul Kontrol Kunci Bluettoth. Modul ini merupakan sebuah aplikasi yang akan diinstal pada komputer. Pada aplikasi ini terdapat menu Register untuk menambah User, menu Edit User memodifikasi data user, menu History dan Help dan About. Fungsi utama dari modul ini adalah mengolah perintah yang dikirimkan oleh ponsel berupa kata sandi, nomor kunci yang ingin dibuka dan identitas pemakai, jika kata sandi dan identitas sesuai dengan basis data maka modul akan membuka atau menutup kunci. Jika tidak sesuai Maka pengaksesan akan dibatalkan dan mengirimkan pesan kesalahan kepada pemakai. c. Modul Gembok Kunci Bluetooth Modul ini merupakan simulasi dari kunci berupa lampu LED yang dihubungkan dengan komputer melalui pararel port.
1.5
Tujuan Tugas Akhir Tujuan tugas akhir ini adalah merancang suatu sistem simulasi kunci
elektrik melalui bluetooth agar kedepan dapat menciptakan suatu sistem security access sehingga teknologi bluetooth yang kita dapatkan gratis dapat dimanfaatkan
tidak hanya mengirim data melainkan dapat mengakses suatu sistem dengan memanfaatkan kelebihan dari fitur bluetooth itu sendiri. Kunci Elektrik ini dapat digunakan untuk kunci pintu locker yang membutuhkan tingkat keamanan yang tinggi seperti deposit box pada bank, tempat penitipan barang, atau locker karyawan, selain untuk kunci locker juga dapat digunakan untuk kunci pintu ruangan yang membutuhkan pembatasan akses seperti ruang server komputer.
BAB II LANDASAN TEORITIK
2.1
Sistem yang Dirancang Sistem yang dirancang berupa simulasi kunci elektrik yang dikontrol
melalui ponsel berfasilitas bluetooth. Pengontrolan dilakukan dengan cara mengirimkan perintah melalui bluetooth kepada komputer yang bertindak sebagai penghubung antara ponsel dan simulasi kunci elektrik. Sistem yang dirancang difokuskan pada sistem keamanan dengan pembatasan pengaksesan (Access Control) terhadap kunci elektrik yang dilakukan oleh komputer, dan pada keamanan pengiriman perintah dari ponsel ke komputer melalui bluetooth. Sedangkan kunci elektriknya hanya berupa simulasi dengan menggunakan lampu LED yang dihubungkan melalui paraller port pada komputer.
2.1.1 Bluetooth Bluetooth adalah sebuah teknologi antarmuka radio yang beroperasi dalam pita frekuensi 2,4 GHz unlicensed ISM (Industrial, Scientific and Medical) yang mampu menyediakan layanan komunikasi data dan suara secara real-time antara host-host Bluetooth dengan jarak jangkauan layanan yang terbatas (sekitar 10 meter) dengan kecepatan transfer data 723,2 K-bps. Pengembangan teknologi ini dipromotori oleh lima perusahaan yaitu Ericsson, IBM, Intel, Nokia dan Toshiba yang membentuk sebuah Special Interest Group (SIG) Pada bulan Mei 1998.
Teknologi Bluetooth tidak dirancang untuk melakukan komunikasi data dan suara yang memerlukan kapasitas yang besar. Karenanya, Bluetooth tidak dapat menggantikan LAN (Local Area Network), WAN (Wide Area Network) maupun kabel backbone. Teknologi Bluetooth memang khusus dirancang untuk mendukung pengguna peralatan mobile seperti notebook beserta peralatan pendukungnya seperti printer, scanner, mouse dan peralatan komunikasi seperti ponsel dan PDA. Komunikasi antar peralatan bluetooth akan menghasilkan sebuah jaringan bluetooth yang dinamakan dengan piconet. Sebuah piconet paling sederhana terdiri atas dua buah peralatan bluetooth dimana salah satu modul yang menginisiasi koneksi disebut sebagai master, sedangkan peralatan lain yang menerima inisiasi tadi dinamakan slave. Jika hanya dua peralatan yang berkomunikasi, maka koneksi dikatan sebagai point-to-point (gambar 2.1). Satu master dapat memiliki lebih dari satu koneksi secara simultan dengan beberapa slave pada saat bersamaan. Koneksi ini dinamakan dengan koneksi point-tomultipoint (gambar 2.2). Kedua koneksi tersebut masih masih merupakan bagian dari piconet. Piconet-piconet dapat saling berkomunikasi untuk membentuk sebuah jaringan baru yang dinamakan scatternet (gambar 2.3).
(Gambar 2.(1)(2)(3) Bluetooth Piconet dan Scatter net. Sumber: Jaap Haartsen, Bluetooth Baseband, http://www.palowireless.com/infotooth/tutorial/baseband.asp, 17 Februari 2005. 2.1.1.1 Protokol Bluetooth Protokol diperlukan untuk komunikasi antara peralatan yang berbeda tipe. Setiap peralatan biasanya mengunakan beragam protocol. Demikian juga dengan peralatan Bluetooth, untuk dapat saling berinteraksi diperlukan berbagai macam protocol didalamnya. Susunan protocol yang terdapat pada Bluetooth dapat dilihat pada (gambar 2.4) dibawah ini.
Gambar 2.4 Bluetooth Protokol.
Sumber: Korak Dasgupta, Protocols in Bluetooth Architecture, http://www.cs.utk.edu/~dasgupta/Bluetooth/blueprotocols.htm, 18 Februari 2005 Protokol-protokol tersebut dibagi menjadi 4 lapisan yaitu: 1. Bluetooth Core Protocol Prtotokol inti dari Bluetooth terdiri dari: a. Baseband dan Link Control bersama-sama mengatur radio untuk menghubungkan Bluetooth membentuk suatu koneksi. Lapisan ini bertanggung jawab untuk menyamakan frekensi transmisi dengan peralatan Bluetooth lainnya. b. Audio berhubungan langsung dengan Baseband. Dua buah peralatan Bluetooth yang mendukung audio dapat saling mengirim dan menerima data suara, hanya dengan mengaktifkan link audio. c. Link Manager Protocol (LMP) bertanggung jawab untuk membangun hubungan (autentifikasi dan enkripsi, kontrol dan negosiasi untuk paketpaket yang berasal dari baseband) antara peralatan Bluetooth. d. Logical Link Control and Adaptation Protocol (L2CAP) berfungsi untuk mendukung multiplexing protocol pada level yang lebih tinggi dan menyampaikan informasi. e. Service Discovery Protocol (SDP) berfungsi untuk meminta informasi alat, service, dan karakteristik dari peralatan lain. Alat-alat tersebut harus mendukung service yang sama agar dapat menetapkan koneksi satu sama lain.
2. Cable Replacement Protocol a. Radio Frequency Communications (RFCOMM) adalah protokol yang dibuat untuk mengantikan kabel serial. (contohnya untuk koneksi Laptop dan Ponsel). 3. Telephony Protocol Pada lapisan ini terdapat dua protokol yaitu: a. Telephony Control Protocol – Binary (TCS-BIN) berfungsi untuk mentransfer data dari hp melalui core Bluetooth. b. AT-Command berfungsi sebagai pengontrol telepon dan modem. 4. Adopted Protocol Pada lapisan paling atas ini terdapat banyak protocol yang dapat diterapkan, yaitu: a. OBEX (Object Exchange) diadopsi dari IrDa, merupakan protocol yang menyediakan layanan transfer data secara simple. Protocol ini berdiri sendiri dan tidak terikat pada mekanisme transport dan Aplication Program Interface (API). b. TCP/UDP/IP juga diterapkan didalam bluetooth agar dapat berkoneksi dengan unit lain yang dihubungkan seperti internet. c. PPP pada Bluetooth didisain untuk berjalan di bawah RFCOMM untuk melakukan koneksi point to point. PPP adalah protocol yang berorientasi pada paket dan harus menggunakan mekanisme serial untuk mengkonversi paket datanya.
d. Wireless Aplication Protocol (WAP) berada pada lapisan paling atas dari RFCOMM/L2CAP. Dimasa yang akan datang mungkin koneksi WAP dengan Bluetooth akan lebih disukai karena lebih murah.
2.1.1.2 Keamanan Bluetooth Bluetooth dirancang dengan berbagai fitur keamanan sehingga aman untuk digunakan. Fitur – fitur keamanan yang disediakan oleh Bluetooth yaitu: 1. Autentifikasi yang akan memastikan identitas peralatan Bluetooth yang berada pada sisi yang lain. Autentifikasi dapat dilakukan dengan pairing (memasukan kata kunci). 2. Pairing adalah suatu prosedur autentifikasi yang membuktikan keaslian dua alat berdasarkan sebuah kata kunci, dengan demikian akan menciptakan hubungan yang dapat dipercaya antara alat tersebut. Kata kunci yang sama harus dimasukan pada kedua alat tersebut. Pairing hanya dilakukan satu kali pada saat pertama kali kedua alat terhubung. 3. Otorisasi adalah suatu proses untuk menentukan apakah alat diizinkan untuk menggunakan suatu layanan dari alat lain. Interaksi pemakai mungkin diperlukan kecuali jika alat yang terkoneksi tersebut telah diatur untuk selalu dipercaya. Biasanya pemakai dapat mengatur otorisasi diaktifkan/ dimatikan untuk setiap alat lainya. Autorisasi selalu membutuhkan autentifikasi. 4. Enkripsi untuk melindungi komunikasi dari penyadapan. Sebagai contoh, untuk memastikan bahwa tidak ada orang lain yang dapat mengetahui data apa
yang di kirimkan dari laptop ke ponsel. Panjang kunci enkripsi antara 8 – 128 bit. Algoritma kriptografi yang digunakan oleh peralatan bluetooth dapat dikelompokan menjadi 2 bagian. Bagian pertama ada 4 algoritma E1, E21, E22, dan E3, yang didasari oleh 128-bit block cipher SAFER+. Dan pada bagian kedua ada mekanisme enkripsi bluetooth E0, yang merupakan stream cipher dengan 132-bit. Algoitma E1 digunakan untuk proses otentifikasi. Algoritma E21 digunakan untuk membuat Kunci unit yang dibutuhkan pada saat pairing yang nantinya digunakan untuk membuat Kunci link yang berguna untuk koneksi. Algoritma E22 digunakan untuk membuat Kunci inisial yang bersifat sementara diperlukan pada saat proses pairing. Algoritma E3 digunakan untuk membuat kunci cipher yang digunakan untuk enkripsi data pada E0. Pada bagian ini (E1, E21, E22, dan E3) digunakan untuk proses pairing dan mendapatkan kunci link yang digunakan untuk melakukan koneksi. Dan pada saat pengiriman data Enkripsi yang dilakukan adalah dengan menggunakan algoritma E0. Algoritma enkripsi ini tidak dibahas lebih mendalam karena pada sistem yang dirancang tidak menerapkan algoritma ini. Untuk lebih jelasnya dapat dilihat pada bagian 2.1.4 pada bab ini.
Bluetooth didisain dengan tiga tingkat kepercayaan (Device Trust Levels): 1. Alat yang dipercaya (A Trusted Device): suatu alat yang sebelumnya sudah melakukan autentifikasi, dan telah terkoneksi, dan alat tersebut ditandai “dipercaya (trusted)” dalam basis data sekuriti dari alat tersebut. Alat tersebut dapat mengakses layanan Bluetooth tanpa persetujuan dari pemakainya. 2. Alat yang tidak dipercaya (An Untrusted Device): suatu alat yang sebelumnya sudah melakukan autentifikasi, dan telah terkoneksi, dan alat tersebut tidak ditandai “dipercaya (trusted)” dalam basis data sekuriti dari alat tersebut. Untuk mengakses layanan Bluetooth dibutuhkan persetujaun dari pemakainya. 3. Alat yang tidak dikenal (An Unknown Device): berarti tidak ada informasi sistem keamanan alat tersebut, alat ini juga termaksud alat yang tidak dipercaya. Bluetooth juga dirancang dengan tiga tingkat keamanan layanan (Security Levels of Service), tiga tingkat keamanan tersebut adalah: 1. Dengan otorisasi (Authorization unrequired): alat yang telah dipercaya secara otomatis dapat melakukan pengaksesan, alat yang tidak dipercaya memerlukan
otorisasi
sebelum
melakukan
pengaksesan.
Otorisasi
membutuhkan otentifikasi untuk membuktikan identitas dari alat yang akan mengakses. 2. Dengan otentifikasi (Authorization required): alat yang akan melakukan koneksi harus melakukan otentifikasi terlebih dahulu sebelum terkoneksi dengan aplikasi.
3. Dengan Enkripsi (Encryption required): untuk melakukan akses layanan perlu dilakukan enkripsi terlebih dahulu.
2.1.1.3 Penerapan Bluetooth pada Sistem yang Dirancang Pada sistem yang dirancang bluetooth digunakan sebagai media komunikasi antara ponsel dan komputer untuk mengirimkan perintah. Seperti pada komunikasi antara dua komputer maka kedua komputer tersebut harus terhubung (misal dengan kabel UTP) dan tentunya harus dilakukan pengaturan seperti pengaturan IP address agar kedua komputer tersebut dapat saling berkomunikasi. Demikian juga pada sistem ini bluetooth pada ponsel dan bluetooth pada komputer harus saling terhubung dan dilakukan pengaturan. Agar perintah yang dikirimkan dapat terjamin keamanannya maka harus dilakukan enkripsi. Namun tidak semua peralatan bluetooth mendukung proses enkripsi. Seperti sebagian ponsel tidak mendukung proses enkripsi E0 (enkripsi terhadap data yang akan dikirimkan), biasanya pada ponsel hanya menerapkan enkripsi E1, E21, dan E22, yang digunakan untuk membuat suatu koneksi antara dua peralatan bluetooth. Untuk itu pada sistem yang dirancang agar perintah yang dikirimkan dapat dijaga keamanannya maka akan dirancang sistem enkripsi yang menggunakan algoritma MD5 dan RC4.
2.1.1.4 Java API untuk Teknologi Bluetooth (JSR-82) Application Programming Interface (API) merupakan suatu library (dalam VB biasanya ber-extention .dll) yang berfungsi sebagai antarmuka (interface) dalam suatu pemrograman. API dalam pemrograman-pemrograman berorientasi objek (PBO) seperti java adalah berupa class. Java Specification Requests (JSR) merupakan kumpulan spesifikasi standarisasi dari platform java. JSR terdiri dari API dan berbagai dokumentasi mengenai platform java baik yang sudah bersifat final atau baru proposal yang akan dikembangkan. Karena Platform Java bersifat Open Source, dan digunakan bukan hanya untuk komputer tapi juga berbagai alat lainnya seperti ponsel, maka perkembangan Java ini dikelola oleh suatu komunitas yang berasal dari berbagai perusahaan besar dunia, maupun dari perorangan yang tertarik untuk mengembangkannya. Komunitas ini disebut JCP (Java Community Process), Komunitas inilah yang membuat standarisasi platform java yang disebut JSR. JSR-82 merupakan Java API yang digunakan untuk teknologi Bluetooth. JSR-82 terdiri dari 2 paket yaitu javax.Bluetooth merupakan API untuk Bluetooth, dan javax.obex merupakan API untuk protokol OBEX. Keterangan
lebih
lanjut
mengenai
JSR-82
dapat
dilihat
di
http://jcp.org/jsr/detail/082.jsp.
2.1.2 Algoritma MD5 Algoritma MD5 dikembangkan oleh Ron Rivest pada tahun 1992 di MIT (Massachusetts Institute of Technology). Algoritma ini melakukan hashing
terhadap pesan dengan panjang tak terhingga per block sebesar 512 bit untuk menghasilkan 128 bit message Digest. 2.1.2.1 Langkah – Langkah Algoritma MD5. Algoritma ini mengambil input berupa panjang pesan (dalam bit) dari sebuah pesan, kemudian diproses dalam blok-blok dengan panjang blok 512 bit, sehingga menghasilkan output berupa 128 bit pesan pendek (digest).Algoritma MD5 terdiri dari 5 langkah, gambar dari langkah-langkah tersebut dapat dilihat pada gambar 2.5.
Gambar 2.5 Langkah- Langkah Algoritma MD5 Sumber: William Stallings, Crytography and Network Security Principles And Practices, 3rd Edition, (Upper Saddle River: Prentice Hall, 2003), h.349.
Langkah-langkah tersebut adalah: 1.
Menambahkan bit tambahan (padding) Pesan ditambahkan sehingga panjang pesan (dalam bit) jika dimodulus 512 akan menghasilkan 448. ini berarti panjang pesan yang telah dilakukan penambahan akan lebih kecil 64 bit dari kelipatan 512. Penambahan panjang pesan ini akan selalu dilakukan meskipun pesan sudah mencapai panjang yang telah ditentukan. Sebagai contohnya, jika panjang pesan 448 bits, maka akan ditambahkan dengan 512 bit sehingga menjadi 960 bit. Sehingga, panjang pesan yang ditambahkan berkisar antara 1 hingga 512. Penambahan dilakukan dengan menambahkan sebuah bit-1 dan sisanya bit0.
2.
Menambahkan panjang 64 bit menunjukan panjang pesan asli (sebelum ditambahkan) yang juga ikut ditambahkan pada hasil dari langkah nomor 1. Jika panjang pesan asli lebih besar dari 264 maka hanya 64 bit paling akhir yang akan digunakan, sehingga field hanya terdiri dari panjang pesan asli dimodulo dengan 264. Pesan tersebut akan dikelompokan menjadi blok-blok sebesar 512 bit Y0,Y1,...,YL-1, sehingga total panjang pesan menjadi L X 512 bit. Hal ini akan sama dengan hasil perkalian dari 16 32-bit word. Jadi didefinisikan M[0,1,...,N-1] sebagai words hasil pesan dengan N adalah perkalian dengan 16. Maka N = L X 16.
3.
Inisialisasi buffer MD Buffer 128 bit digunakan untuk menampung nilai sementara dan nilai akhir dari fungsi hash. Buffer dapat diwakili dengan 4 buah register 32 bit (A,B,C,D).
Register
tersebut
diinisialisasi
dengan
nilai
(dalam
heksadesimal) sebagai berikut A = 67452301 B = EFCDAB89 C = 98BADCFE D = 10325476 4.
Proses pesan didalam blok 512 bit (16 word) Inti dari algoritma ini adalah fungsi kompresi yang terdiri dari empat tahap. Keempat tahap tersebut mempunyai struktur yang sama namun setiap tahap tersebut mempunyai fungsi primitif sendiri-sendiri yang disimbolkan dengan F,G,H, dan I. Setiap tahap mengambil input dari blok 512 bit yang sedang diproses (Yq) dan nilai 128 bit buffer ABCD dan meng-update nilai buffer. Setiap tahap juga akan menggunakan nilai dari 64 elemen dari tabel T (dapat dilihat pada gambar 2.6) yang didapat dari fungsi sinus. Elemen ke i dari tabel yang disimbolkan dengan T[i] mempunyai nilai yang sama dengan hasil perkalian 232 * abs(sin(i)), dimana nilai i berupa radian. Oleh karena hasil abs(sin(i)) adalah antara 0 dan 1, maka nilai element T adalah integer yang dapat diwakili oleh 32 bit. Hasil dari Tahap ke 4 akan ditambahkan ke dalam input untuk dilakukan tahap pertama lagi (CVq) untuk menghasilkan CVq+1. Penambahan ini dalam bentuk modulus 232.
Gambar 2.6 Proses MD5 dalam setiap blok 512 bit. Sumber: William Stallings, Crytography and Network Security Principles And Practices, 3rd Edition, (Upper Saddle River: Prentice Hall, 2003), h.351..
5.
Hasil Keluaran. Setelah semua L dari blok 512 bit selesai diproses maka output dari pesan adalah 128 bit pesan pendek (digest). Secara garis besar algoritma MD5 dapat dirumuskan sebagai berikut1: CV0
= IV
(1)
CVa+1
= SUM32[CVq,RFI(Yq,RFH(Yq,RFG(Yq,RFF(Yq,CVq))))]
(2)
MD
= CVL-1
(3)
Dengan: IV
= nilai Buffer ABCD,yang ditetapkan pada
Yq
= block 512 bit ke Q dari Pesan
L
= banyaknya blok yang digunakan
CVq
= variabel yang diproses pada blok ke Q
RFx
= fungsi per tahap menggunakan fungsi
langkah 3
primitif X. MD
= nilai akhir dari pesan
SUM32 = penambahan modulo 232.
2.1.2.2 Fungsi Kompresi MD5 Didalam setiap tahap dalam proses MD5 diatas digunakan fungsi kompresi yang setiap tahapnya terdiri dari 16 langkah untuk mengolah buffer ABCD, setiap langkah melakukan operasi2: a b + ((a + g(b,c,d) + X[k] + T[i]) <<< s)
(4)
Dengan: a,b,c,d = empat word dari buffer g
= salah satu fungsi primitif F,G,H,I.
<<< s = pergeseran ke kiri sebanyak s bit. X[k]
= word k didalam blok ke q
T[i]
= elemen ke i dalam matrik T
+
= penambahan modulo 232.
2.1.3 Algoritma RC4 RC4 merupakan salah satu jenis stream cipher yang dibuat oleh Ron Rivest. RC4 merupakan stream cipher berarti plaintext akan diproses per-bit, dengan demikian ciphertext dan plaintext akan memiliki panjang yang sama. RC4 menggunakan kunci simetris sehingga pada proses enkripsi dan dekripsi akan menggunakan kunci yang sama. Panjang kunci yang digunakan bebas antara 1 sampai 256 byte. Algoritma RC4 cukup mudah untuk dijelaskan. Kunci yang panjangnya bebas antara 1 sampai 256 byte digunakan untuk menginisialisasi 256-bit S-Box, dengan elemen S[0],S[1],..., S[255]. Di dalam setiap S memuat permutasi 8-bit. Untuk enkripsi dan dekripsi, satu byte K dihasilkan melalui S-box dengan menyeleksi satu dari 255 secara sistimatis. Jika nilai dari K telah dihasilkan, maka S-box akan dipermutasi lagi.
2.1.3.1 Inisialisasi S-box Pada awalnya, isi dari S-box diisi dengan nilai dari 0 hingga 255 secara berurutan. Ini berarti S[0]=0, S[1]=1,..., S[255] = 255. Sebuah vektor sementara, T, selalu dibuat. Jika panjang kunci K adalah 256 bytes, maka K akan langsung dimuat kedalam T. Jika tidak K akan diisi secara berulang-ulang hingga T penuh. Operasi tersebut dapat dirumuskan sebagai berikut: /*initialization*/ for i = 0 to 255 doo s[i] = i; T[i] = K[i mod panjang kunci]; Selanjutnya digunakan T untuk melakukan permutasi inisial S-Box, yang meliputi S[0] hingga S[255]. Untuk setiap S[i] akan saling bertukar dengan byte S[i] yang lainnya pada S-box sesuai dengan skema yang ditentukan oleh T[i]3: /* permutasi inisial S-Box */ j=0; for i = 0 to 255 do j= (j + S[i] + T[i]) mod 256;
Swap (S[i], S[j]); Karena hanya melakukan pertukaran pada S-Box, maka hanya terjadi permutasi. S-Box tetap berisi angka antara 0 hingga 255. 2.1.3.2 Pembangkit Stream Setelah S-Box diinisialisasi, kunci yang di masukan tidak lagi digunakan. Pembangkitan stream melibatkan S[0] hingga S[255]. Untuk setiap S[i] akan saling bertukar dengan byte S[i] yang lainnya pada S-box sesuai dengan skema yang ditentukan oleh konfigurasi S-Box yang sekarang. Setelah mencapai S[255], proses dilanjutkan dengan mengulang kembali dari S[0]4. /* Pembangkitan Stream */ i,j = 0; while (true) i = (i + 1) mod 256; j = (j + S[i]) mod 256; swap (S[i], S[j]); t = (S[i] + S[j]) mod 256; k = S[t];
Untuk melakukan enkripsi, XOR nilai K dengan byte selanjutnya dari plaintext. Untuk melakukan dekripsi, XOR nilai K dengan byte selanjutnya dari
Gambar 2.7 Langkah - Langkah Algoritma RC4 Sumber: William Stallings, Crytography and Network Security Principles And Practices, 3rd Edition, (Upper Saddle River: Prentice Hall, 2003), h.196.
ciphertext. Gambar dari tahap-tahap algoritma RC4 dapat dilihat pada gambar 2.7
2.1.4 Keamanan Sistem yang Dirancang. Keamanan komputer melingkupi empat aspek, yaitu privacy, integrity, authentication, dan availability. Selain keempat aspek tersebut, masih ada dua aspek lain yang juga sering dibahas dalam kaitannya dengan keamanan komputer, yaitu access control dan non-repudiation. Privacy / Confidentiality (Kerahasiaan) adalah usaha untuk menjaga informasi dari orang yang tidak berhak mengakses. Privacy lebih kearah data-data yang sifatnya privat sedangkan confidentiality biasanya berhubungan dengan data yang diberikan ke pihak lain untuk keperluan tertentu dan hanya diperbolehkan untuk keperluan tertentu tersebut. Dalam sistem yang dirancang ini, pengguna harus
melakukan
pendaftaran
terlebih
dahulu
untuk
memperoleh
hak
pengaksesan, pada saat pendaftaran calon pengguna akan memberikan data yang diperlukan, data tersebut akan disimpan pada basis data di komputer. Tentunya data-data tersebut harus dijaga kerahasiaannya, untuk itu data-data tersebut tidak langsung disimpan kedalam basis data, namun akan dilakukan pengacakan sebelum disimpan kedalam basis data, dengan demikian akan terjamin kerahasiaannya. Kata Sandi akan di hashing dengan MD5 terlebih dahulu baru disimpan dalam basis data, sedangkan data lainnya akan di enkripsi dengan RC4 yang menggunakan kata sandi yang telah dihashing dengan MD5 sebagai kuncinya. Integrity (keutuhan) menekankan bahwa informasi tidak boleh diubah tanpa seizin pemilik informasi. Sebuah pesan dapat saja “ditangkap” (intercept) di tengah jalan, diubah isinya (altered, tampered, modified), kemudian diteruskan ke alamat yang dituju. Dalam sistem yang dirancang, perintah yang dikirimkan harus
dijaga keutuhannya. Perintah sebelum dikirimkan akan dienkripsi dengan RC4 dengan kata sandi yang telah di hashing dengan MD5 sebagai kuncinya. Authentication (pembuktian keaslian) berhubungan dengan metode untuk menyatakan bahwa informasi betul-betul asli, orang yang mengakses atau memberikan informasi adalah betul-betul orang yang dimaksud. Dalam sistem yang dirancang perlu dibuktikan apakah yang akan mengakses kunci elektrik tersebut memiliki hak untuk mengakses. Terdapat tiga pembuktian yang dilakukan yaitu pembuktian terhadap ponsel yang digunakan berdasarkan Alamat Bluetooth Ponsel, dan pembuktian dengan kata sandi. Data tersebut (Alamat Bluetooth, dan kata sandi) akan dikirimkan sebagai perintah untuk membuka/menutup kunci oleh ponsel kepada komputer. Dan komputer akan membandingkan ketiga data tersebut dengan basis data yang ada. Availability (ketersediaan) berhubungan dengan ketersediaan informasi ketika dibutuhkan. Dalam sistem yang dirancang, ketersediaan berhubungan dengan komputer sebagai pengontrol dari kunci elektrik tersebut. Apakah komputer dapat memberikan layanan (membuka dan menutup kunci) setiap kali dibutuhkan? Dan bagaimana jika listrik PLN padam? Dalam hal ini maka bluetooth pada komputer harus selalu diaktifkan dan komputer harus dilengkapi dengan energi cadangan seperti mesin diesel. Access Control (kontrol akses) berhubungan dengan cara pengaturan akses kepada informasi. Pada sistem yang dirancang, pengguna akan dibatasi pengaksesannya, pembatasan tersebut berupa: pembatasan waktu penggunaan, pembatasan terhadap kunci yang dapat digunakan. Jadi pengguna hanya dapat
mengakses kunci tertentu dan pada waktu tertentu saja. Pengaturan terhadap akses kontrol ini dilakukan melalui komputer. Non-repudiation (tanpa penyangkalan) menjaga agar seseorang tidak dapat menyangkal telah melakukan sebuah transaksi. Dalam sistem yang dirancang, agar seorang pengguna tidak dapat menyangkal telah melakukan pengaksesan kunci, maka akan dilakukan pencatatan terhadap semua pengaksesan yang terjadi.
2.1.5 Parallel Port Parallel port biasa disebut sebagai printer port, disebut demikian karena awal mulanya parallel port ini dibuat khusus untuk komunikasi komputer dengan printer. Standarisasi parallel port yang masih digunakan sampai saat ini adalah IEEE 1284, yaitu metode pensinyalan standar interface parallel dua arah untuk komputer, yang dirilis tahun 1994. IEEE 1284 ini adalah sebuah standar baru parallel port yang masih kompatibel dengan parallel port sebelumnya namun lebih handal karena mampu menangani transfer data hingga 1 MBps, panjang kabel hingga 10 meter, dan juga komunikasi dua arah. Parallel port berupa konektor 25 pin yang dikenal dengan DB-25. Layaknya dalam untai elektronik, parallel port dilabuhkan dengan konektor betina dan jantan. Di komputer, konektor parallel port yang terpasang adalah DB-25 betina, sehingga kabel penghubung keluar adalah DB-25 jantan. Susunan/ bentuk DB-25 betina dan jantan tersebut tampak seperti gambar 2.8 dalam tabel berikut ini.
Gambar 2.8 Diagram pin konektor DB-25 Sumber: Dwi Sutadi, I/O Bus & Motherboard, (Yogyakarta: ANDI Yogyakarta, 2002), h.2. Dari 25 pin konektor DB-25 tersebut, hanya 17 pin yang digunakan untuk saluran pembawa informasi dan yang berfungsi sebagai ground 8 pin. Ketujuh belas saluran informasi itu terdiri dari 3 bagian, yaitu data 8 bit; status 5 bit; dan kontrol 4 bit. Bit control dan status berfungsi dalam “jabat tangan” dalam proses penulisan data ke parallel port. Tabel fungsi pin konektor DB-25 dapat dilihat pada gambar 2.9 DB-25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Nama Sinyal nStrobe Data 0 Data 1 Data 2 Data 3 Data 4 Data 5 Data 6 Data 7 nAck Busy Paper-Out PaperEnd Select nAuto-Linefeed nError / nFault nInitialize
Direction In/out In/Out Out Out Out Out Out Out Out Out In In In In In/Out In In/Out
Register C0 D0 D1 D2 D3 D4 D5 D6 D7 S6 + S7 S5 + S4 + C1 S3 + C2 +
17 18 - 25
nSelect-Printer nSelect-In Ground
In/Out Gnd
C3-
Gambar 2.9 Fungsi pin konektor DB-25 Sumber: Dwi Sutadi, I/O Bus & Motherboard, (Yogyakarta: ANDI Yogyakarta, 2002), h.3. Pada sistem yang dirancang parallel port akan digunakan untuk menghubungkan komputer dengan simulasi kunci elektrik.
2.2 Modul yang Dirancang Rancangan Kunci Elektrik Melalui Bluetooth pada Ponsel ini terdiri dari tiga buah modul, yaitu: 1.
Modul Anak Kunci Bluetooth (AKB) berupa aplikasi pada ponsel.
2.
Modul Kontrol Kunci Bluetooth (KKB) berupa aplikasi pada komputer.
3.
Modul Gembok Kunci bluetooth (GKB) berupa simulasi kunci elektrik dari lampu LED yang dihubungkan ke komputer melalui parallel port. Blok diagram dari sistem yang dirancang dapat dilihat pada gambar 2.10.
Ponsel
Bluetooth
Modul Anak Kunci Bluetooth
Komputer
Modul Kontrol Kunci Bluetooth
Parallel Port
Simulasi lampu LED
Modul Gembok Kunci Bluetooth
Gambar 2.10 Block diagram Rancangan Kunci Elektronik dengan Enkripsi Melalui Bluetooth pada Ponsel
2.2.1 Modul Anak Kunci Bluetooth (AKB) Modul ini merupakan sebuah aplikasi yang akan diinstal pada ponsel. Aplikasi ini dibuat dengan menggunakan Java 2 Micro Edition (J2ME). Fungsi utama dari modul ini adalah mengirimkan perintah terenkripsi melalui bluetooth kepada komputer (Kontrol Kunci Bluetooth) untuk membuka/menutup kunci (Gembok Kunci Bluetooth). Selain itu modul ini juga memiliki fungsi untuk melihat history pengaksesan kunci.
2.2.1.1 Pengiriman Perintah Terenkripsi untuk Membuka/ Menutup GKB dari AKB kepada KKB. Perintah untuk membuka dan perintah untuk menutup gembok kunci Bluetooth (GKB) merupakan sebuah perintah yang sama yang akan dikirimkan melalui bluetooth kepada Kontrol Kunci Bluetooth (KKB). KKB akan memeriksa apakah GKB terbuka atau tertutup, jika terbuka maka GKB akan ditutup begitu juga sebaliknya. Sehingga perintah yang dikirimkan cukup hanya dengan satu perintah yang sama. Perintah tersebut berupa kata sandi, ditambah dengan data pengguna (Alamat Bluetooth ponsel) dan nomor GKB yang akan dibuka. Kata sandi yang dimasukan berupa karakter dengan panjang maksimum 20 karakter. Alamat Bluetooth ponsel merupakan nomor identitas peralatan bluetooth yang terdapat pada ponsel, setiap ponsel berfasilitas bluetooth memiliki alamat Bluetooth yang berbeda-beda. Sehingga alamat Bluetooth ponsel dapat dijadikan identitas pengguna, Alamat Bluetooth ponsel terdiri dari 12 karakter.
Nomor GKB adalah nomor kunci yang akan dibuka. Pada sistem yang dirancang kunci disebut sebagai GKB. Dan setiap GKB akan diberikan nomor. Tahap-tahap pengiriman perintah dari AKB kepada KKB, terdiri dari: 1. Pengguna memasukan kata sandi (maksimum 20 karakter), dan nomor GKB yang akan dibuka (terdiri dari 2 karakter angka) pada aplikasi yang telah diinstal pada ponsel . 2. Kata sandi dihashing dengan MD5 sehingga menjadi 128 bit atau 32 karakter (4-bit, heksa desimal). Pada proses selanjutnya 32 karakter tersebut akan dianggap sebagai karakter ASCII (8-bit). Kata sandi yang telah di hash tersebut menjadi 32 byte = 256 bit. 3. Aplikasi akan mengambil 12 karakter Alamat Bluetooth ponsel. Alamat Bluetooth tersebut dienkripsi dengan RC4 dengan menggunakan kata sandi yang telah dihashing dengan MD5 sebagai kuncinya. Sehingga menghasilkan Alamat Bluetooth yang terenkripsi. NoBT_E = RC4(NoBT)
(5)
Dengan: NoBT_E = Alamat Bluetooth terenkripsi. (24 karakter) NoBT = Alamat Bluetooth. (12 Karakter). 4. Menggabungkan Alamat bluetooth yang telah dienkripsi dengan nomor GKB yang akan dibuka menjadi sebuah perintah yang siap dikirimkan. P = NoBT_E + NoGKB Dengan: P
= Perintah yang dikirim. (26 karakter).
(6)
NoGKB
= Nomor Gembok Kunci Bluetooth
2.2.1.2 Melihat History Penggunaan Aplikasi Seperti telah dijelaskan sebelumnya, setiap pengaksesan yang terjadi akan dicatat kedalam basis data pada komputer. Jadi pengguna juga dapat melihat catatan tersebut melalui ponsel yang digunakan. Perintah untuk melihat history penggunaan sama dengan perintah untuk membuka/ menutup kunci seperti yang telah dibahas diatas. Namum yang membedakannya pada perintah untuk melihat history karakter No_GKB pada point 4 pembahasan diatas digantikan dengan karakter “HS”. Yang menandakan sebagai perintah untuk melihat History.
2.2.2 Modul Kontrol Kunci Bluetooth (KKB) Modul ini merupakan sebuah aplikasi yang akan diinstal pada komputer. Aplikasi ini dibuat dengan menggunakan Java 2 Standard Edition (J2SE). Fungsi dari modul ini adalah: 1. Melakukan proses pendaftaran bagi calon pengguna. 2. Menerima perintah terenkripsi yang dikirimkan oleh ponsel (Anak Kunci Bluetooth) untuk membuka kunci (Gembok Kunci Bluetooth). 3. Menyimpan semua catatan pengaksesan yang terjadi dan mengirimkan kepada ponsel (Anak Kunci Bluetooth).
2.2.2.1 Pendaftaran Calon Pengguna Seseorang yang ingin menggunakan kunci elektrik ini harus melakukan pendaftaran terlebih dahulu. Pendaftaran dilakukan pada komputer (Aplikasi Kontrol Kunci Bluetooth). Pada proses pendaftaran ini calon pengguna harus memberikan identitas pengguna berupa alamat Bluetooth, nomor kartu seluler. Selain itu, calon pengguna juga harus menentukan kata sandi yang akan digunakan, nomor kunci yang dapat diakses dan waktu pengaksesan. Data-data tersebut akan disimpan dalam basis data. Namun untuk data yang bersifat rahasia tidak langsung disimpan kedalam basis data. Kata sandi akan dihashing dengan MD5 terlebih dahulu, kemudian alamat bluetooth ponsel dan nomor kartu seluler akan dienkripsi terlebih dahulu dengan RC4 yang menggunakan kata sandi yang telah dihashing dengan MD5 sebelumnya. Setelah melakukan pendaftaran ini barulah seorang pengguna dapat menggunakan aplikasi yang akan diinstal pada ponsel
2.2.2.2 Penerimaan Perintah Terenkripsi untuk Membuka/ Menutup Kunci yang dikirimkan AKB kepada KKB. Setelah perintah yang dikirim diterima oleh komputer (Kontrol Kunci Bluetooth), maka perintah tersebut akan diproses sehingga dapat membuka kunci (Anak Kunci Bluetooth), proses tersebut yaitu: 1. Mengambil identified (pengenal) berupa alamat bluetooth yang terenkripsi dari ponsel pengirim perintah yang berada pada 24 karakter pertama dari P
yang diterima. Dan mengambil NoGkB yang akan dibuka yang terdapat pada dua karakter terakhir dari P 2. Jika nomor alamat bluetooth tersebut terdaftar maka dilanjutkan pada tahap ketiga, jika tidak proses dibatalkan dan dikirimkan pesan kesalahan kepada AKB yang memberitahukan kata sandi yang digunakan salah atau ponsel yang digunakan tidak terdaftar. 3. Dilakukan pengecekan pada basis data apakah pengguna memiliki hak akses terhadap nomor GKB yang akan dibuka/ ditutup (nomor GKB yang diperoleh pada tahap ketiga). Jika memiliki hak akses maka dilanjutkan pada tahap ketujuh. jika tidak proses dibatalkan dan dikirimkan pesan kesalahan kepada AKB yang memberitahukan pengguna tidak memiliki hak akses terhadap kunci yang bersangkutan. Jika NoGKB yang diterima = “HS” maka akan dikirimkan catatan history pengguna. 4. Dilakukan pengecekan pada basis data apakah saat ini pengguna yang bersangkutan memiliki hak akses. Jika memiliki hak akses pada saat ini maka dilanjutkan pada tahap ke delapan. jika tidak proses dibatalkan dan dikirimkan pesan kesalahan kepada AKB yang memberitahukan bahwa pada saat ini pengguna tidak memiliki hak akses. 5. Dilakukan pengecekan terhadap GKB yang bersangkutan apakah sedang terbuka atau tertutup. Jika sedang terbuka maka GKB tersebut akan ditutup, dan jika sedang tertutup maka GKB tersebut akan dibuka. Sampai disini proses selesai.
2.2.2.3 Pencatatan History setiap pengaksesan yang terjadi dan pengiriman catatan tersebut kepada AKB Setiap pengaksesan yang dibatalkan yang terjadi pada tahap – tahap diatas akan dibuat catatannya kedalam basis data. Demikian juga jika tahap-tahap diatas dapat dijalankan hingga selesai. Pencatatan yang dilakukan adalah pencatatan Nama pengguna, pencatatan waktu pengaksesan, dan pencatatan kejadian yang terjadi. Pengiriman catatan kepada AKB hanya dilakukan jika ada permintaan dari AKB. Catatan yang dikirimkan juga dibatasi hanya catatan dari pengaksesan yang dilakukan oleh pengguna yang bersangkutan. Dan karena keterbatasan memori pada ponsel, maka hanya 10 pengaksesan terakhir yang dilakukan yang akan dikirimkan.
2.2.3 Modul Gembok Kunci Bluetooth (GKB). Modul ini hanya berupa simulasi kunci elektrik yang menggunakan lampu LED yang akan dihubungkan ke komputer melalui parallel port. Lampu LED tersebut akan mewakili gembok kunci bluetooth, dan lampu LED yang akan digunakan adalah sebanyak 3 buah. Jika lampu Led tidak menyala, hal ini berarti kunci elektrik tertutup. Begitu juga sebaliknya.
BAB III PERANCANGAN DAN PEMBUATAN
3.1 Perancangan Sistem Perancangan Simulasi Kunci Elektrik dengan Enkripsi Melalui Bluetooth pada Ponsel bertujuan untuk membuat sebuah prototype kunci elektrik yang pengontrolannya dilakukan dengan mengirimkan perintah terenkripsi oleh ponsel melalui bluetooth. Perancangan Simulasi ini diawali dengan perancangan blok diagram dari sistem yang dirancang, dan dilanjutkan dengan perancangan semua modul yang akan dibuat berupa: perancangan menu; perancangan antarmuka program; perancangan laporan, pesan kesalahan dan Error Handling, dan perancangan basis data. Setelah itu baru dibuat aplikasi secara keseluruhan.
3.1.1. Perancangan Blok Diagram Perancangan Blok Diagram dimaksudkan untuk memberikan gambaran mengenai modul-modul yang akan dirancang pada simulasi ini dan hubungan antara modul-modul tersebut yang akan mempermudah proses perancangan program aplikasi. Seperti yang telah dibahas pada bab sebelumnya, sistem yang dirancang ini terdiri dari tiga modul yaitu modul Anak Kunci Bluetooth (AKB) berupa aplikasi pada ponsel, modul Kontrol Kunci bluetooth (KKB) berupa aplikasi pada komputer dan modul Gembok Kunci Bluetooth (GKB) berupa simulasi kunci elektrik dengan menggunakan lampu LED. Blok diagram dari
Simulasi Kunci Elektrik dengan Enkripsi Melalui Bluetooth pada Ponsel dapat dilihat pada gambar 3.1.
Ponsel
Bluetooth
Modul Anak Kunci Bluetooth
Komputer
Modul Kontrol Kunci Bluetooth
Parallel Port
Simulasi lampu LED
Modul Gembok Kunci Bluetooth
Gambar 3.1 Block diagram Rancangan Kunci Elektronik dengan Enkripsi Melalui Bluetooth pada Ponsel 3.1.2. Perancangan Modul Anak Kunci Bluetooth Modul ini merupakan sebuah aplikasi yang akan diinstal pada ponsel. Fungsi utama dari modul ini adalah mengirimkan perintah terenkripsi melalui bluetooth kepada komputer (kontrol kunci bluetooth) untuk membuka kunci. Aplikasi ini dibuat dengan menggunakan Java2 Micro Edition (J2ME). 3.1.2.1. Perancangan Menu Anak Kunci Bluetooth Menu yang terdapat pada aplikasi anak kunci bluetooth ini adalah: 1.
Menu Open key / Lock Key Menu ini merupakan menu utama yang berfungsi untuk mengirimkan kata sandi dan nomor kunci yang telah diketikan melalui bluetooth kepada komputer.
2.
Menu List History Menu ini berfungsi untuk melihat history dari catatan pengaksesan yang telah dilakukan oleh pengguna. Menu ini terdiri dari 2 sub menu yaitu: a.
menu download yang berfungsi untuk mengambil data history pengguna yang berada pada database komputer.
b.
Submenu list yang berfungsi untuk melihat data history yang terakhir didownload.
3.
Menu Help Menu ini berfungsi untuk menanpilkan cara penggunaan aplikasi anak kunci bluetooth.
4.
Menu About Menu ini berfungsi untuk menampilkan keterangan mengenai latar belakang aplikasi anak kunci bluetooth.
5.
Menu Exit Menu ini berfungsi untuk keluar dari aplikasi anak kunci bluetooth.
3.1.2.2. Rancangan Laporan, Pesan kesalahan dan Error Handling Anak Kunci Bluetooth Agar pengguna mengetahui kunci telah dibuka atau telah ditutup, atau pun ketika pengguna melakukan kesalahan seperti salah memasukan kata sandi, aplikasi akan menyampaikan laporan dan pesan kesalahan. Laporan yang terdapat dalam aplikasi ini adalah:
1.
Laporan Open Key Laporan ini akan ditampilkan ketika kata sandi yang dimasukan benar dan kunci telah dibuka. Laporan ini berupa tulisan “Kunci Pintu Telah Dibuka” yang ditampilkan di layar ponsel.
2.
Laporan Lock Key Laporan ini akan ditampilkan ketika kata sandi yang dimasukan benar dan kunci telah ditutup. Laporan ini berupa tulisan “Kunci Pintu Telah Ditutup” yang ditampilkan di layar ponsel.
Pesan kesalahan akan ditampilkan ketika kontrol kunci bluetooth membatalkan pengaksesan karena mendeteksi adanya kesalahan. Pesan kesalahan yang terdapat dalam aplikasi ini adalah:
1.
Pesan kesalahan menggunakan ponsel atau kata sandi yang berbeda. Untuk membedakan pengguna yang satu dengan pengguna yang lainnya adalah alamat Bluetooth ponsel. Jadi untuk melakukan pengaksesan diperlukan ponsel sama seperti pada saat pendaftaran. Jika menggunakan ponsel yang tidak sesuai,dianggap pengguna tersebut adalah pengguna yang belum terdaftar. Jika hal itu terjadi maka akan ditampilkan pesan kesalahan berupa tulisan “Maaf Anda belum terdaftar. Jika Anda yakin telah mendaftar, pastikan ponsel dan kata Sandi yang Anda gunakan sesuai dengan yang Anda daftarkan” yang ditampilkan dilayar ponsel.
2.
Pesan kesalahan sedang diblokir.
Pesan ini akan ditampilkan jika ingin melakukan pengaksesan ketika sedang diblokir. Pesan ini berupa tulisan “Untuk sementara kunci Anda diblokir, silahkan hubungi administrator” yang ditampilkan di layar ponsel. 3.
Pesan kesalahan waktu penggunaan. Pesan ini akan ditampilkan jika ingin melakukan pengaksesan diluar waktu yang diizinkan bagi pengguna. Pesan ini berupa tulisan “Pada saat ini Anda tidak memiliki hak untuk mengakses” yang ditampilkan di layar ponsel.
4.
Pesan kesalahan nomor kunci. Pesan ini akan ditampilkan jika ingin mengakses kunci yang tidak diizinkan bagi pengguna. Pesan ini berupa tulisan “Anda tidak memiliki hak untuk mengakses kunci ini” yang ditampilkan di layar ponsel.
3.1.2.3. Rancangan Tampilan Aplikasi Anak Kunci Bluetooth Rancangan tampilan menu, laporan dan pesan kesalahan dari aplikasi anak kunci bluetooth dapat dilihat pada gambar 3.2.
Anak Kunci Bluetooth Password: ***** Nomor Kunci: *****
Option
Exit
Gambar 3.2 Rancangan tampilan utama aplikasi Anak Kunci Bluetooth
3.1.3. Perancangan Modul Kontrol Kunci Bluetooth Modul ini merupakan sebuah aplikasi yang akan diinstal pada Komputer. Fungsi utama dari modul ini adalah menerima kata sandi yang dikirimkan oleh anak kunci bluetooth dan membandingkannya dengan basis data dan kemudian mengirimkan perintah kepada modul kunci (gembok kunci bluetooth) untuk membuka kunci sesuai dengan nomor kunci yang ingin dibuka. Yang mana semua proses tersebut dapat berjalan secara otomatis tanpa memerlukan operator. Operator atau administrator bertanggung jawab jika ada yang ingin registrasi, mengubah data pengguna atau ingin membuka blokir.
3.1.3.1. Rancangan Menu Kontrol Kunci Bluetooth Menu yang terdapat dalam aplikasi kontrol kunci bluetooth ini adalah: 1.
Menu Register
Menu ini digunakan untuk melakukan pendaftaran pengguna baru. Pada saat pendaftaran identitas pengguna baru yang diperlukan adalah:
2.
a.
Nama Pengguna
b.
Alamat Bluetooth Ponsel Pengguna
c.
Nomor kartu Seluler Pengguna
d.
Kata sandi
e.
Nomor kunci (gembok kunci bluetooth) yang dapat digunakan
f.
Batasan waktu penggunaan
Menu History Aplikasi ini menyediakan history atau jejak. History ini berupa pencatatan waktu (tanggal dan Jam) setiap kali ada yang mengakses aplikasi ini. Tipetipe akses yang dicatat dalam history adalah: a.
Pengguna Membuka kunci
b.
Pengguna Menutup kunci
c.
Pengguna di blokir.
d.
Pengguna di blokir mencoba akses
e.
Pengguna yang tidak memiliki izin mencoba akses
f.
Pengguna melakukan perubahan data identitas
Untuk memudahkan melihat history, pada menu ini disediakan fasilitas filter untuk mempermudah melihat history berdasarkan Nama pengguna. 3.
Menu Edit User Setelah pengguna melakukan registrasi, ada kemungkinan pengguna tersebut akan melakukan perubahan data identitasnya. Menu ini berfungsi
untuk melakukan perubahan data tersebut. Semua data dapat diubah kecuali nama pengguna. Pengguna yang salah memasukan kata sandi akan diblokir, dan untuk membuka blokiran tersebut juga dilakukan melalui menu ini. Administrator juga dapat melakukan pemblokiran, jika pengguna menyalahi aturan. 4.
Menu Help Menu ini berfungsi untuk menampilkan cara penggunaan aplikasi kontrol kunci bluetooth.
5.
Menu About Menu ini berfungsi untuk menampilkan keterangan mengenai latar belakang aplikasi kontrol kunci bluetooth.
3.1.3.2. Rancangan Basis Data Kontrol Kunci Bluetooth Basis data yang digunakan adalah MySQL dengan menggunakan dua buah Tabel, yaitu: 1. Tabel User yang berfungsi menyimpan data-data pengguna. 2. Tabel History yang berfungsi untuk menyimpan seluruh history. Spesifikasi tabel dapat dilihat pada gambar 3.3.
Tabel 4 Tabel User Nama Field
Tipe Data
Ukuran Field
No_BT
Text
24
Nama
Text
20
Keterangan
Primary Key
No_Seluler
Text
30
Password
Text
32
Kunci
Text
3
Waktu
Text
7
Status
Text
20
Nama Field
Tipe Data
Ukuran Field
Waktu
DateTime
Nama
Text
20
History
Text
100
Tabel 5 Tabel History Keterangan
Gambar 3.3. Tabel User dan Tabel History.
3.1.3.3. Rancangan Tampilan Kontrol Kunci Bluetooth Rancangan tampilan menu kontrol kunci elektrik dapat dilihat pada Gambar 3.4.
Kontrol Kunci Bluetooth Register
History
Edit
Help
X
About
Exit
Nama
:
Senin
Selasa
No IMEI
:
Rabu
Kamis
No Seluler
:
Jumat
Sabtu
Password
:
Minggu
Ulangi Password
:
DAFTAR
Kunci 1 Kunci 2 Kunci 3
BATAL
Rancangan Tampilan Menu Register aplikasi Kontrol Kunci Bluetooth Kontrol Kunci Bluetooth Register
History
Edit
Filter
Help
Berdasarkan
Tanggal
Jam
Tanggal
Pengguna
About
V History
Rancangan Tampilan Menu History aplikasi Kontrol Kunci Bluetooth
X Exit
Kontrol Kunci Bluetooth Register
History
Edit
Help
X
About
Exit
Nama
:
Senin
Selasa
No IMEI
:
Rabu
Kamis
No Seluler
:
Jumat
Sabtu
Password
:
Minggu
Ulangi Password
:
EDIT BATAL
Aktif Blokir
Kunci 1 Kunci 2 Kunci 3
Rancangan Tampilan Menu Edit User aplikasi Kontrol Kunci Bluetooth Gambar 3.4 Rancangan Tampilan Kontrol Kunci Bluetooth. 3.1.4. Perancangan Modul Gembok Kunci Bluetooth. Modul ini merupakan simulasi kunci elektrik yang menggunakan lampu LED yang akan dihubungkan ke komputer melalui parallel port. dan lampu LED yang akan digunakan adalah sebanyak 3 buah. Jika lampu Led tidak menyala, hal ini berarti kunci elektrik tertutup. Begitu juga sebaliknya. Rancangan dari rangkaian 3 buah lampu LED yang akan dihubungkan dengan perallel port ini dapat dilihat pada Gambar 3.5.
13 25 12 24
LED = Light Emmiting Dioda (Sebagai Gembok Kunci Bluetooth)
11 23 10 22 9 8 20 7 19 6 18 5 17
LED 1
4 16 3 15 2 14
LED 2
1 DB25 (Female)
LED 3 Gambar 3.5 Rangkaian Simulasi Gembok Kunci Bluetooth. 3.1.4.1. Pembuatan Sistem Setelah perancangan Simulasi Kunci Elektrik dengan Enkripsi Melalui Bluetooth pada Ponsel ini selesai, tahap selanjutnya adalah melakukan pembuatan setiap modul yang telah dirancang tersebut. Pembuatan setiap modul dari Sistem yang dirancang akan dibahas dibawah ini.
3.1.4.2. Pembuatan Modul Anak Kunci Bluetooth
Pembuatan aplikasi Anak Kunci Bluetooth ini dibuat menggunakan komputer dengan spesifikasi sebagai berikut: 1.
Processor Intel Pentium III 866 MHz.
2.
Memori SDRAM 256 MB.
3.
VGA Card RivaTNT2 64MB .
4.
Harddisk Seagate 80 GB.
5.
Monitor VGA resolusi 640 X 480 pixels.
6.
Bluetooth USB Adapter Class 1 merek billinton Sedangkan spesifikasi perangkat lunak yang digunakan adalah:
1.
Sistem Operasi Microsoft Windows XP SP2.
2.
J2SDK 1.5.0
3.
Jcreator Pro 3.00 merupakan IDE untuk pemrograman java.
4.
JCreator Mobility 4.1 merupakan komponen tambahan pada NetBeans IDE yang berguna untuk pemrograman J2ME yang telah mendukung JSR-82 (Bluetooth API) dan JSR-135 (Mobile Media API).
5.
Emulator J2ME Wireless Toolkit 2.2 merupakan emulator yang telah diikutkan pada Jcreator Pro 3.00. yang berguna untuk mengetes aplikasi ponsel pada komputer.
6.
Blulet library merupakan open source library yang diperoleh dari www.benhui.net, library ini berfungsi untuk mempermudah pembuatan aplikasi java yang menggunakan bluetooth.
7.
RC4Engine dan MD5Digest, merupakan open source library yang diperoleh dari www.bouncycastle.net, library ini berfungsi untuk melakukan enkripsi RC4 dan Hashing MD5.
Adapun tahap-tahap pembuatan aplikasi Anak Kunci Bluetooth ini adalah sebagai berikut: 1. Menuliskan kode program dengan tambahan library-library yang telah disebutkan sebelumnya pada JCreator Pro 3.00. 2. Melakukan kompilasi kode program yang akan menghasilkan paket file .jar yang siap diinstall pada ponsel. 3. Sebelum menginstall aplikasi pada ponsel, terlebih dahulu dilakukan testing menggunakan Emulator J2ME Wireless Toolkit 2.2. 4. setelah melakukan kompilasi dan testing, paket file .jar dikirimkan ke ponsel melalui bluetooth atau ponsel untuk diinstall. Spesifikasi ponsel yang bisa menggunakan aplikasi ini adalah sebagai berikut: 1.
Sistem Operasi Symbian OS minimal versi 7.0.
2.
Mendukung Java MIDP 2.0.
3.
Mendukung JSR-82.
4.
Mendukung JSR-135.
Pada pembuatan modul ini ponsel yang digunakan adalah Nokia 6260 yang telah mendukung semua spesifikasi tersebut.
3.2 Pembuatan Modul Kontrol Kunci Bluetooth Pembuatan aplikasi Kontrol Kunci Bluetooth juga menggunakan Komputer yang sama seperti pembuatan aplikasi Anak Kunci Bluetooth diatas. Sedangkan perangkat lunak yang digunakan adalah sebagai berikut : 1.
J2SDK 1.4.2.
2.
Jcreator Pro 3.00 digunakan untuk menuliskan coding dan kompilasi.
3.
Basis data yang digunakan adalah MySQL 5.0.18.
4.
MySQL Front 5.1.191 yang digunakan untuk membuat dan mengetik basis data MySQL.
5.
mysql-connector-java-3.0.9, library yang digunakan untuk konektivitas antara java dan MySQL.
6.
Blulet library merupakan open source library yang diperoleh dari www.benhui.net, library ini berfungsi untuk mempermudah pembuatan aplikasi java yang menggunakan bluetooth.
7.
BlueCove library, merupakan open source library yang diperoleh dari http://bluecove.sourceforge.net/. Library ini berfungsi untuk menghubungkan java dengan bluetooth. Untuk menggunakan BlueCove driver Bluetooth yang digunakan haruslah driver dari microsoft. Untuk itu Sistem operasi yang harus digunakan adalah Microsoft Windows XP SP25. Untuk keterangan lebih lanjut mengenai penggunaan Bluecove library dapat dilihat di situs tersebut atau pada Gambar 3.6.
http://www.benhui.net/modules.php?name=Bluetooth&page=C onnect_PC_Phone_Part_1.html. Connecting PC and Phone with Java Bluetooth API – Part 1
Writing and Connecting a J2SE app on PC to a MIDlet on Phone, using XP, USB dongle, BlueCove Stack, and a Nokia 6600 Date: Nov 21, 2004 Author: Ben Hui
Installments Part Part Part Part Part
0 1 2 3 4
– – – – –
Introduction and development options (not done) Writing and Connecting a J2SE app on PC to a MIDlet on Phone (this article) Writing and Connecting MIDlet on PC to a MIDlet on Phone (not done) Connecting 3 (or more) devices together (not done) Doing all these in Linux (not done)
What you need and How to setup
In order to run through this tutorial, you will need the following hardware and software installed. A PC with Windows XP SP2 installed Everything here is based on Windows XP platform and requires Service Pack 2 installed. SP 2 gives you the Microsoft Bluetooth Stack which BlueCove is developed on.
Can I use SP 1 instead? Read this article and it may help you. What if Microsoft Bluetooth Stack is not installed? How do I tell?
An USB Bluetooth Dongle Obviously you need a Bluetooth dongle. I use a USB dongle. It may also work with a Serial Port dongle, but I am not entirely sure. If you have tried it, let me know. A SDK for MIDlet development I simply suggest SUN WTK 2.2 beta 2. BlueCove Stack You must have BlueCove library installed. Download BlueCove from sourceforge.net. Extract the zip file. Copy the file intelbth.dll to your C:\Windows\System32 directory. You will need to compile the Java source files in BlueCove, but there is a bug in BlueCove (see below section). So I suggest you download this compiled and patched version. A SDK for J2SE development You can use J2SE SDK download from SUN. You can also use Eclipse or NetBeans. Benhui.net Serial Port Profile (SPP) example code There are two examples you need to download. One is the J2SE BlueCove SPP application. Using the J2SE SPP application, you can run it as a SPP server as well as a SPP client. Another one is the J2ME MIDlet SPP application. We are using the MIDlet from our Bluetooth Code Gallery examples. There are many MIDlets in the package, we are only interested in the SPP example for BlueCove interaction. Download J2SE Benhui.net BlueCove SPP example Download J2ME Benhui.net Bluetooth Code Gallery examples
Compile and Run Instruction After you download the J2SE BlueCove example package, follow these instructions
Extract the zip file content to a project folder. Launch a command prompt, go to the project folder, run compile.bat file to compile the source files.
Run run.bat to run the J2SE example.
Note, if you do not see compile.bat or run.bat, you probably have the old zip file. Download it again here. After you download the J2ME Bluetooth Code Gallery example package, follow these instructions. (Assume you have installed WTK to C:\WTK22 directory)
Launch KToolbar from Start menu Press New Project button Enter BTGalleryExample in Project Name Enter net.benhui.btgallery.spp_gui.SPP_MIDlet in MIDlet Class Name, then press Create Project button
In the Settings for project "BTGalleryExample" dialog, select Bluetooth/OBEX for J2ME (JSR82) check box in Additional APIs section
Extrat the zip file content to C:\WTK22\apps\BTGalleryExample\src directory
Transfer the JAR file to your mobile phone and install it. Run the MIDlet application together with the J2SE example above.
Press Build button Open Project menu, select Package item and then Create Package item. This will create the necessary JAD and JAR file in the bin directory.
To run through the client and server example, follow these example interactions on PC side and the Phone side. Which Device
Action
Respond
PC
Start the PC application from your You will see the main menu IDE
PC
Press ‘0’ and enter
Start the server, you will see a page of logging, and the last line should be ‘local service waiting for client connection...’
Phone
Start Serial Port MIDlet
Phone
Select ‘Run Serial Client’ from menu
Phone
Highlight the PC device and select The phone sends a string to the ‘Select’ from menu server
PC
The PC accepts a connection, receives a string and sends it back to the client
Phone Phone
The phone starts searching for the PC.
The phone receives a string Select ‘Start Serial Server’ from menu
The Phone starts the server
PC
Press ‘1’ and enter
The PC starts searching for the phone. After a while, you will see a menu of found devices.
PC
Press ‘the number that represent your phone’ and enter
The PC connects to the Phone and sends a string to it.
Phone
PC
Design Overview
The Phone accepts a connection, receives a string, and sends it back to PC The PC receives a string
How to write PC-based Java applications that access Bluetooth connectivity is probably the most asked question that I have seen in Java Bluetooth development. The problem is the lack of Java Bluetooth stack, which serve as a bridge between Java programs and Bluetooth hardware. Microsoft Bluetooth
Stack API and BlueCove are solutions that fit into this picture. Microsoft stack API is a socket-style (WinSock to be exact) C API that allow any C-based applications to operate a generic USB Bluetooth dongle. However, there isn’t a Java version of this API. BlueCove developers see the missing pieces and developed a JSR-82 API on top of Microsoft API. The integration between BlueCove and Microsoft API is done via JNI, a technology for Java applications to use native C based library. BlueCove API is based on JSR-82 API, which make it a very open and friendly API to existing Bluetooth developers. From what I have observed so far, BlueCove supports the following Bluetooth profiles:
General Access Profile (with some limitation) Service Discovery Profile Serial Port Profile
The following layer diagram represents the architecture of BlueCove and communication with a Phone. J2SE PC Application
J2ME MIDlet Application
BlueCove JSR-82 API
KVM JSR-82 API
BlueCove-Bluetooth WinSock API (JNI) MS Bluetooth Stack USB Bluetooth Dongle
Phone OS Stack (e.g. Symbian OS) <- Bluetooth ->
Phone Bluetooth Chipset
Writing the PC Bluetooth application
The beauty of BlueCove is its partial compatibility with JSR-82 (a.k.a. Java Bluetooth API). If you are already familiar with JSR-82, programming with BlueCove is a breeze. In most cases, you can simply port your JSR-82 based application over to BlueCove with little modification. This is exactly what I did with the SPP (Serial Port Profile) examples from Code Gallery. If you know very little about JSR-82, you can ramp up by reviewing the articles from Nokia, Sony Ericsson, SUN or by me To start with, I bring in the source code of SPP examples, which consist of 3 modules. Bluelet module is a reusable component for rapid Bluetooth MIDlet development. SPP Client is a simple Bluetooth client to interact with SPP Server. All it does is send a string to the server and wait for a string response. SPP Server is also a simple Bluetooth server that echoes a received string back to the client. The only problem now is that all of these components are intended to run on J2ME platform and they have dependency to J2ME API. In particular, they are linked to MIDP API and use MIDP GUI for user interaction. All of these dependencies must be removed and replaced with a J2SE counterpart. To simplify the migration, I avoid using J2SE GUI (i.e. Swing) and choose a console based interaction model. I spent about an hour to remove all the dependency to MIDlet and MIDP API, and replace all of them with simple System.out and System.in interaction. As a result, all the logging will be output to console and the application expects user to enter commands via the console session. A PC-based Bluetooth application is ready to go. Now, we need to get the phone ready. When you run PC application, it presents you a text menu, where you enter commands by entering the number. For example, in the main menu
[0]Start Serial Server [1]Run Serial Client [2]Exit
Enter ‘0’ to execute the server code. You will see a lot of logging and the menu will be shifted out of screen. You can scroll back to see what the menu options were. You can find an example in next section.
Writing the MIDlet application
The phone part is even easier because all I need to do is getting a MIDlet running on a JSR-82 enabled phone. My testing device is a Nokia 6600, one of the first phones to support JSR-82 API. Naturally, I picked the SPP example MIDlet as it has the exact same behavior as our PC SPP application. I installed the MIDlet JAR file onto the phone, and start applications on both sides. Things went fine on both sides. They can discover both parties and send strings to each other, but not without any glitches though. See the next section for problems and bugs. To quickly conclude my experience, majority of my time is spent installing the Microsoft Bluetooth stack properly and to track down one of the bugs below. Thanks to its support of JSR-82 API, programming with BlueCove is fairly effortless and standard across the platforms. There are limitations in BlueCove, which make it difficult to replace Bluetooth applications that utilize native stacks; nevertheless, I can think of number of good usages for Java-based applications. Many people have asked if it is possible to develop a PC application that push or exchange files (such as text files, media files etc) with the phone, the answer is a big no with a small yes. Typically, pushing or exchanging files correspond to OBEX Push Profile and OBEX File Transfer Profile, and both are not support in BlueCove or existing phones. The small yes comes from the scenario where you can pragmatically read in file content and send it across as a bye stream over Serial Port Profile. In the other words, you could send a file content via Serial Port Profile, but not via OBEX protocol.
BUG
Factor
Problem
When I use the phone to search PC service using L2CAP UUID, the phone crashes with Monty-Thread error -6 Resolution Search service using RFCOMM UUID instead, or other custom defined UUIDs Bug factor Problem
When the PC perform device inquiry, it always return a list with cached devices. In the order words, you may get a list of non-existing devices that were previously inquired Resolution There is no resolution. Just don't pick the devices that ain't available. Bug factor Problem
When the PC retrieve service record of a MIDlet registered service (i.e. not the phone native Bluetooth apps), the service record is always empty. Resolution The bug is in BlueCove source code SDPInputStream.readElement() method. It constructs a UUID with a 'true' flag, where it should be using 'false' flag in the UUID constructor. You can download my patched binary. Bug factor
Problem
When the PC initiate a connection to phone using Connector, it always failed with "Failed to open socket" IOException. Resolution When the PC initiate the connection, the URL must use authenticate=true attribute. Otherwise, it cannot connect. Bug factor
Problem Many JSR-82 API is not available in BlueCove, and my application cannot compiles. Resolution BlueCove has its limitation, and not all JSR-82 required features is available in BlueCove. For example, DeviceClass and friendy name is not supported. Getting RemoteDevice.getRemoteDevice(Connection) is also not supported. I have uncomment those unsupported API and fill with dummy implementations. You can download my patched binary. Bug factor
How do I tell if Microsoft Bluetooth Stack installed? (new!) To run the examples of this article, you MUST have Microsoft Bluetooth Stack installed. This stack will be installed to your system when you install Windows XP SP2 (see earlier section for download links). If you have other stack (such as Widcomm stack) installed, you will need to uninstall it in order for Microsoft Bluetooth stack to take place. To check that you have it installed properly, go to Device Manager and you should see the following. If you see anything other than what I circled below, your Microsoft Bluetooth stack is NOT working and my BlueCove will not work.
And when you right click on the Bluetooth icon on the task bar, you should see the following:
Gambar 3.6 Tutorial Blue Cove Library 8.
parallel port library, merupakan open source library yang diperoleh dari http://www.geocities.com/Juanga69/parport/. Library ini berfungsi sebagai tool untuk mempermudah java membaca dan mengirimkan 1 byte data dari dan ke pararel port6. Untuk penggunaan library harus dilakukan beberapa
pengaturan terlebih dahulu. Pengaturan tersebut dapat dilihat di situs tersebut atau pada Gambar 3.7. http://www.geocities.com/Juanga69/parport/install.html. ParallelPort Installation Instructions 1. Download parport-win32.zip to your computer. 2. Unzip the file parport-win32.zip. This will produce a hierarchy with a top level directory parport containing the class and source files (along with parport.dll, VC source files, and example programs). This directory (parport) should go in your "Java classes" directory. In other words, it should go in a directory contained in your CLASSPATH. The examples in this document assume that you have unzipped the parportwin32.zip file in your C:\java\classes directory and that your JDK installation is in C:\jdk1.4.1. If you have installed JDK in an other location or unzipped ParallelPort-win32.zip in an other location modify the example commands appropriately. 3. Copy parport.dll to your <JDK>\bin directory (or any other directory included in your system’s PATH): C:\>copy c:\java\classes\parport\parport.dll c:\jdk1.4.1\bin 4. Add parport to your CLASSPATH: If you don't have a CLASSPATH defined: C:\>set CLASSPATH=c:\java\classes
If you already have a CLASSPATH defined, then your Java classes directory is most probably already there, and the compiler will find parport easily. In case it's not, you can do this: C:\>set CLASSPATH=c:\java\classes;%CLASSPATH%
5. If you have Windows NT (or higher) then you need to install UserPort. It is a Windwos NT/2000/XP kernel mode driver for direct port I/O. You need to install UserPort if you plan to use Windows NT based operating systems.
Gambar 3.7 Pengaturan Seting Paralel Port.
9.
RC4Engine dan MD5Digest, merupakan open source library yang diperoleh dari www.bouncycastle.net, library ini berfungsi untuk melakukan enkripsi RC4 dan Hashing MD5.
10. HTML Help Workshop 4.74.8702 untuk membuat microsoft help yang akan dipanggil pada menu help. 11. Macromedia Dreamweaver MX untuk membuat file HTML yang dibutuhkan oleh HTML Help Workshop 12. Macromedia Flash MX untuk membuat file animasi yang akan dipanggil pada menu abouts. 13. Adobe PhotoShop 7.0 untuk membuat file-file gambar yang dibutuhkan.
Adapun tahap-tahap pembuatan aplikasi Kontrol Kunci Bluetooth ini adalah sebagai berikut: 1. Menentukan variabel, objek, dan logika yang akan diterapkan pada penulisan program. 2. Menentukan logika penyimpanan data Kunci yang akan disimpan didalam basis data. Logikanya adalah sebagai berikut: Data yang disimpan didalam basis data adalah data Text yang terdiri dari 3 karakter. Setiap karakter menunjukan hak pengaksesan nomor kunci. Karakter pertama menunjukan hak akses kunci 1, karakter kedua menunjukan hak akses kunci 2 dan karakter ketiga menunjukan hak akses kunci 3. Karakter “Y” berarti memiliki hak akses, dan karakter “N” menunjukan tidak memiliki hak akses.
3. Menentukan logika penyimpanan data waktu pengaksesan yang akan disimpan didalam basis data. Logikanya adalah sebagai berikut: Data yang disimpan didalam basis data adalah data Text yang terdiri dari 7 karakter. Setiap karakter menunjukan hak pengaksesan berdasarkan hari. Karakter pertama menunjukan hak akses pada hari Senin, karakter kedua menunjukan hak akses pada hari selasa, karakter ketiga menunjukan hak akses pada hari Rabu, karakter keempat menunjukan hak akses pada hari Kamis, karakter Kelima menunjukan hak akses pada hari Jumat, karakter Keenam menunjukan hak akses pada hari Sabtu, karakter Ketujuh menunjukan hak akses pada hari Minggu. Karakter “Y” berarti memiliki hak akses, dan karakter “N” menunjukan tidak memiliki hak akses. 4. Menentukan logika penyimpanan data Status pengguna yang akan disimpan didalam basis data. Logikanya adalah sebagai berikut: data yang disimpan didalam basis data adalah data Text. Jika data yang disimpan berisi “Aktif” berarti status pengguna adalah aktif, jika data yang disimpan berisi “Salah I” berarti status pengguna adalah telah melakukan kesalahan satu kali, jika data yang disimpan berisi “Salah II” berarti status pengguna adalah telah melakukan kesalahan dua kali, jika data yang disimpan berisi “Blokir” berarti status pengguna adalah telah sedang di blokir. 5. Menuliskan kode program dengan tambahan library-library yang telah disebutkan sebelumnya pada JCreator Pro 3.00. 6. Melakukan kompilasi kode program yang akan menghasilakan paket class java yang siap dijalankan.
7. Membuat file help.chm dengan menggunakan HTML Help Workshop. 8. Membuat file about.gif dengan menggunakan macromedia flash MX. 9. Menggabungkan paket class java dengan help.chm dan about.exe menjadi satu kesatuan.
3.3. Pembuatan Modul Gembok Kunci Bluetooth. Modul Gembok kunci Bluetooth ini merupakan suatu perangkat keras yang dibuat dengan menggunakan: 1.
Satu Buah DB25 Jantan.
2.
Satu Meter Kabel yang berisi delapan ruas.
3.
Tiga buah lampu LED berbeda warna. Pembuatan modul ini dengan cara mensolder ujung kabel dengan DB25
dan ujung kabel yang lainnya dengan lampu LED sesuai dengan rangkaian yang ada pada Gambar 3.5 pada bahasan sebelumnya. Tampilan dari hasil pembuatan modul Gembok Kunci Bluetooth dapat dilihat pada Gambar 3.8 berikut ini.
Gambar 3.8 Tampilan Gembok Kunci Bluetooth.
BAB IV PENGUJIAN
Pengujian program simulasi kunci elektrik dengan enkripsi melalui Bluetooth pada ponsel dilakukan untuk menguji dan memastikan bahwa program simulasi yang telah dirancang dan dibuat ini dapat berfungsi dengan baik dan sesuai dengan rumusan rancangan yang telah ditetapkan sebelumnya. Tanpa adanya pengujian, maka tidak dapat diketahui apakah program yang telah dibuat sesuai dengan spesifikasi rancangan program aplikasi. Adapun kendala yang dihadapi dalam pengujian yaitu tidak sinkron seting BIOS Operating System komputer yang akan digunakan dalam pengujian simulasi. Setelah proses analisa yang cukup memakan waktu dan merubah seting sistem koneksi LPT1 di dalam BIOS disamakan dengan yang terdapat didalam seting Paralel Port ternyata proses simulasi berjalan dengan normal. Kesimpulan dari Modul Anak Kunci Bluetooth adalah: 1. Kemampuan menjalankan menu open/close untuk mengirimkan perintah terenkripsi kepada Kontrol Kunci Bluetooth. 2. Kemampuan untuk menampilkan laporan dan pesan kesalahan sebagai hasil dari proses membuka atau menutup kunci. 3. Kemampuan menjalankan menu history untuk melihat catatan history dari penggunaan yang pernah dilakukan
4. Kemampuan menjalankan menu About untuk menampilkan keterangan mengenai aplikasi ini. 5. Kemampuan menjalankan menu Help untuk menampilkan pertolongan penggunaan aplikasi ini. 6. Kemampuan menjalankan menu Exit untuk keluar dari aplikasi.
Kesimpulan dari Modul Anak Kunci Blutooth adalah: 1. Kemampuan mengirimkan pesan, laporan kesalahan dan catatan history kepada modul Anak Kunci Bluetooth. 2. Kemampuan membuka dan menutup modul Gembok Kunci Bluetooth. 3. Kemampuan untuk melakukan verifikasi dan pembatasan akses penggunaan Kunci. 4. Kemampuan menjalankan menu history untuk menyimpan dan menampilkan semua catatan history setiap pengaksesan aplikasi yang terjadi. 5. Kemampuan menjalankan menu Register untuk melakukan pendaftaran pengguna baru. 6. Kemampuan menjalankan menu Edit User untuk melakukan perubahan pada data pengguna. 7. kemampuan menjalankan menu About untuk menampilkan keterangan mengenai aplikasi ini. 8. kemampuan menjalankan menu Help untuk menampilkan pertolongan penggunaan aplikasi ini.
Kesimpulan dari Modul Anak Kunci Blutooth adalah: 1.
Lampu LED menyala sesuai dengan perintah yang dikirimkan oleh kontrol kunci Bluetooth yang menandakan kunci yang dimaksudkan terbuka.
2.
Lampu LED padam sesuai dengan perintah yang dikirimkan oleh kontrol kunci Bluetooth yang menandakan kunci yang dimaksudkan tertutup.
4.1. Cara Pengujian 4.1.1. Metode Pengujian Pengujian program simulasi kunci elektrik dengan enkripsi melalui Bluetooth pada ponsel ini dilakukan dengan menggunakan metode Black Box Testing. Metode Black Box Testing ini merupakan pengujian program berdasarkan fungsi dari program. Tujuan dari metode Black Box Testing ini adalah untuk menemukan kesalahan fungsi pada program. Pengujian dengan metode Black Box Testing dilakukan dengan cara memberikan sejumlah input pada program aplikasi yang kemudian diproses sesuai dengan kebutuhan fungsionalnya untuk melihat apakah program aplikasi menghasilkan output yang diinginkan dan sesuai dengan fungsi dari program aplikasi tersebut. Bila dari input yang diberikan proses menghasilkan output yang sesuai
dengan
kebutuhan
fungsionalnya,
maka
program
aplikasi
yang
bersangkutan telah benar, tetapi bila output yang dihasilkan tidak sesuai dengan kebutuhan fungsionalnya, maka masih terdapat kesalahan pada program aplikasi tersebut. Pengujian dilakukan dengan mencoba semua kemungkinan yang terjadi dan dilakukan secara berulang-ulang. Jika dalam pengujian ditemukan kesalahan,
maka akan dilakukan penelusuran dan perbaikan (debugging) untuk memperbaiki kesalahan yang terjadi. Jika telah selesai melakukan perbaikan maka akan dilakukan pengujian kembali. Pengujian dan perbaikan dilakukan secara terus menerus hingga diperoleh hasil yang terbaik.
4.1.2. Perangkat Pengujian Perangkat pengujian program simulasi kunci elektrik dengan enkripsi melalui Bluetooth pada ponsel ini menggunakan perangkat keras dan perangkat lunak yang sama dengan proses pembuatan. Spesifikasi perangkat keras dan perangkat lunak yang dipakai dapat dilihat pada pembahasan BAB III sebelumnya.
4.2. Hasil Pengujian Pengujian program aplikasi simulasi kunci elektrik dengan enkripsi melalui Bluetooth pada ponsel dilakukan dengan tujuan untuk mengetahui apakah modul-modul yang ada dapat berfungsi dengan baik atau tidak. Modul-modul yang diuji adalah modul Anak Kunci Bluetooth, Kontrol Kunci Bluetooth, dan Gembok Kunci Bluetooth. Walaupun ketiga modul ini masing-masing berdiri sendiri, namum pengujian dari ketiga modul ini harus dilakukan secara bersamaan, karena meskipun ketiga modul ini berdiri sendiri tetapi semuanya saling berhubungan. Jadi pengujian tidak dapat dilakukan permodul, karena pengujian satu modul juga akan mempengaruhi modul yang lainnya.
Pengujian dilakukan dengan memilih setiap menu dari Modul Anak Kunci Bluetooth dan Modul Kontrol Kunci Bluetooth. Pengujian dilakukan satu persatu dalam semua kondisi yang mungkin terjadi. Dari hasil pengujian terakhir yang dilakukan dapat diperoleh hasil pengujian yang dirangkum dalam tabel hasil pengujian. Tabel tersebut dapat dilihat pada lampiran 9 ( dalam format excel / .xls ).
4.3. Pembahasan Setelah melakukan pengujian terhadap semua modul-modul program simulasi ini, maka dapat disimpulkan bahwa pengujian telah menunjukkan hasil output dan proses yang sesuai dengan rumusan rancangan program simulasi ini. Dari hasil pengujian tersebut dapat dikatakan bahwa program simulasi telah berfungsi dengan baik dan benar, karena terbukti keseluruhan aplikasi ini telah dapat membuka dan menutup simulasi kunci elektrik pada komputer dengan menggunakan ponsel melalui koneksi Bluetooth. Dan aplikasi ini juga dapat mengontrol hak akses penggunaan kunci dengan melakukan verifikasi dan otentifikasi.
Namun, berdasarkan hasil pengujian secara keseluruhan, didapatkan beberapa keterbatasan dari program simulasi kunci elektrik dengan enkripsi melalui Bluetooth pada ponsel ini, antara lain: 1.
Aplikasi Anak Kunci Bluetooth hanya dapat diterapkan pada ponsel yang telah mendukung java MIDP 2.0, JSR-82 dan JSR-135.
2.
Aplikasi Kontrol Kunci Bluetooth hanya dapat diterapkan pada komputer dengan sistem operasi minimum Windows XP SP2.
BAB V PENUTUP
5.1 Kesimpulan Adapun kesimpulan yang diperoleh dari perancangan dan pembuatan program simulasi kunci elektrik dengan enkripsi melalui bluetooth pada ponsel, antara lain: 1.
Program aplikasi simulasi ini dapat mengirimkan perintah terenkripsi dari ponsel ke komputer melalui koneksi bluetooth.
2.
Program aplikasi simulasi ini memiliki sistem keamanan yang cukup baik dengan menerapkan kontrol akses, otentifikasi dan verifikasi yang menggunakan Hashing MD5 dan Enkripsi RC4.
3.
Data pengguna yang disimpan didalam basis data dapat terjamin kerahasiaannya. Karena data tersebut tidak disimpan secara langsung didalam basis data, tapi data tersebut telah diacak terlebih dahulu dengan menggunakan algoritma hashing MD5 dan enkripsi RC4. Setelah proses pengacakan barulah data disimpan didalam basis data.
4.
Program aplikasi Kontrok Kunci Bluetooth hanya bisa dijalankan pada Sistem Operasi minimum Windows XP SP2 atau pada Windows XP SP1 yang telah ditambahkan tambahan pack Hotfix Q323183
5.
Program aplikasi simulasi ini dapat mengontrol nyala dan padamnya lampu LED melalui parallel port.
5.2 Saran Berdasarkan hasil perancangan program simulasi ini, ada beberapa saran yang muncul agar perancangan ini dapat dilanjutkan dengan beberapa pengembangan, antara lain: 1.
Simulasi kunci elektrik yang hanya menggunakan lampu LED dapat dikembangkan lagi menjadi rangkaian kunci elektrik yang benar-benar bisa digunakan. Dan jika memungkinkan, selanjutnya dapat di produksi secara massal dan menjadikannya sebagai trend yang baru yaitu membuka kunci tanpa menggunakan anak kunci melainkan menggunakan ponsel.
2.
Modul Anak Kunci Bluetooth akan lebih baik jika dikembangkan dengan menggunakan
bahasa
pemrograman
C/Symbian.
Karena
bahasa
C/Symbian lebih mendukung fitur-fitur yang ada pada ponsel, khususnya yang bersistem operasi Symbian. 3.
Modul Kontrol Kunci Bluetooth dan Gembok Kunci Bluetooth juga dapat dikembangkan
tanpa
menggunakan
komputer.
Jadi
langsung
menggunakan mikrokontroler yang mendukung chip bluetooth. Sehingga ponsel langsung berkomunikasi dengan rangkaian elektronik yang menggunakan mikrokontroler sebagai kunci elektroniknya tanpa harus menggunakan pc / komputer sebagai akses administrator ( pusat kontrol kunci bluetooth ).
DAFTAR PUSTAKA Benhui. Connecting PC and Phone with Java Bluetooth API–Part 1, http://www.benhui.net/modules.php?name=Bluetooth&page=Connect_PC _Phone_Part_1.html , 17 Maret 2005. Dasgupta, Korak. Protocols in Bluetooth Architecture, http://www.cs.utk.edu/~dasgupta/bluetooth/blueprotocols.htm, 18 Februari 2005. Gehrmann, Christian; Persson, Joakim; and Smeets, Ben. Bluetooth Security. Boston : Artech House, 2004. Haartsen, Japp. Bluetooth Baseband, http://www.palowireless.com/infotooth/tutorial/baseband.asp, 17 Februari 2005. Nokia. Bluetooth Technologi Overview, http://forum.nokia.com/, 2 Desember 2004. Portillo, Juan Gabriel Del Cid. Parallel Printer Port Access through Java, http://www.geocities.com/Juanga69/parport/, 15 Mei 2005. Stallings, William. Crytography and Network Security Principles And Practices. 3rd Edition. Upper Saddle River: Prentice Hall, 2003. Sutadi, Dwi. I/O Bus & Motherboard. Yogyakarta: ANDI Yogyakarta, 2002.3.
Langkah- Langkah Algoritma MD5 Sumber: William Stallings, Crytography and Network Security Principles And Practices, 3rd Edition, (Upper Saddle River: Prentice Hall, 2003), h.349.
LAMPIRAN I MD5
Proses MD5 dalam setiap blok 512 bit. Sumber: William Stallings, Crytography and Network Security Principles And Practices, 3rd Edition, (Upper Saddle River: Prentice Hall, 2003), h.351..
Tabel T, Dibuat Berdasarkan fungsi Sinus Sumber: William Stallings, Crytography and Network Security Principles And Practices, 3rd Edition, (Upper Saddle River: Prentice Hall, 2003), h.352
T[1] T[2] T[3] T[4] T[5] T[6] T[7] T[8] T[9] T[10] T[11] T[12] T[13] T[14] T[15] T[16] T[17] T[18] T[19] T[20] T[21] T[22] T[23] T[24] T[25] T[26] T[27] T[28] T[29] T[30] T[31] T[32]
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
D76AA478 E8C7B756 242070DB C1BDCEEE F57C0FAF 4787C62A A8304613 FD469501 698098D8 8B44F7AF FFFF5BB1 895CD7BE 6B901122 FD987193 A679438E 49B40821 F61E2562 C040B340 265E5A51 E9B6C7AA D62F105D 02441453 D8A1E681 E7D3FBC8 21E1CDE6 C33707D6 F4D50D87 455A14ED A9E3E905 FCEFA3F8 676F02D9 8D2A4C8A
T[33] T[34] T[35] T[36] T[37] T[38] T[39] T[40] T[41] T[42] T[43] T[44] T[45] T[46] T[47] T[48] T[49] T[50] T[51] T[52] T[53] T[54] T[55] T[56] T[57] T[58] T[59] T[60] T[61] T[62] T[63] T[64]
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
FFFA3942 8771F681 699D6122 FDE5380C A4BEEA44 4BDECFA9 F6BB4B60 BEBFBC70 289B7EC6 EAA127FA D4EF3085 04881D05 D9D4D039 E6DB99E5 1FA27CF8 C4AC5665 F4292244 432AFF97 AB9423A7 FC93A039 655B59C3 8F0CCC92 FFEFF47D 85845DD1 6FA87E4F FE2CE6E0 A3014314 4E0811A1 F7537E82 BD3AF235 2AD7D2BB EB86D391
Tabel Fungsi Primitif FGHI Sumber: William Stallings, Crytography and Network Security Principles And Practices, 3rd Edition, (Upper Saddle River: Prentice Hall, 2003), h.352
1
Primitive function g F(b,c,d)
(b c) (b d )
2 3 4
G(b,c,d) H(b,c,d) I(b,c,d)
(b d ) (c d ) bcd c (b d )
Round
g(b,c,d)
Langkah - Langkah Algoritma RC4 Sumber: William Stallings, Crytography and Network Security Principles And Practices, 3rd Edition, (Upper Saddle River: Prentice Hall, 2003), h.196.
LAMPIRAN 2
ALGORITMA RC4
LAMPIRAN 3 PARALLEL PORT Fungsi pin konektor DB-25 Sumber: Dwi Sutadi, I/O Bus & Motherboard, (Yogyakarta: ANDI Yogyakarta, 2002), h.3.
DB-25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 - 25
Nama Sinyal nStrobe Data 0 Data 1 Data 2 Data 3 Data 4 Data 5 Data 6 Data 7 nAck Busy Paper-Out PaperEnd Select nAuto-Linefeed nError / nFault nInitialize nSelect-Printer nSelect-In Ground
Direction In/out In/Out Out Out Out Out Out Out Out Out In In In In In/Out In In/Out In/Out Gnd
Register C0 D0 D1 D2 D3 D4 D5 D6 D7 S6 + S7 S5 + S4 + C1 S3 + C2 + C3-
LAMPIRAN 4 BLOCK DIAGRAM RANCANGAN KUNCI ELEKTRONIK DENGAN ENKRIPSI MELALUI BLUETOOTH PADA PONSEL
Ponsel
Bluetooth
Modul Anak Kunci Bluetooth
Komputer
Modul Kontrol Kunci Bluetooth
Parallel Port
Simulasi lampu LED
Modul Gembok Kunci Bluetooth
Block diagram Rancangan Kunci Elektronik dengan Enkripsi Melalui Bluetooth pada Ponsel
Proses Pengiriman Perintah dari AKB kepada KKB.
LAMPIRAN 5 RANCANGAN TAMPILAN APLIKASI ANAK KUNCI BLUETOOTH
Anak Kunci Bluetooth Password: ***** Nomor Kunci: *****
Option
Exit
Rancangan tampilan utama aplikasi Anak Kunci Bluetooth
Anak Kunci Bluetooth
Open/ Lock Key List History Help About Exit Select
->
List Download
Cencel
Rancangan tampilan pilihan menu aplikasi Anak Kunci Bluetooth
Anak Kunci Bluetooth History 24/2/2010, 08:16:34 Open Kunci 1 24/2/2010, 14:42:19 Lock Kunci 1 24/2/2010, 20:14:56 Salah password Back Rancangan tampilam menu List history aplikasi Anak Kunci Bluetooth
Anak Kunci Bluetooth Pertolongan Anak Kunci Bluetooth ini berfungsi untuk membuka kunci melalui Bluetooth. Untuk menggunakannya Anda harus telah terdaftar terlebih dahulu ………….. Back Rancangan tampilan menu Help aplikasi Anak Kunci Bluetooth
Anak Kunci Bluetooth About Anak Kunci Bluetooth merupakan aplikasi yang dibuat sebagai Tugas Akhir Oleh Audi Nantan (01403-039) Dengan dosen pembimbing ………….. Back Rancangan tampilan menu About aplikasi Anak Kunci Bluetooth
Anak Kunci Bluetooth Laporan
Kunci Pintu Telah Dibuka
! OK
Rancangan tampilan Laporan Open Key aplikasi Anak Kunci Bluetooth
Anak Kunci Bluetooth Laporan
Kunci Pintu Telah Ditutup
! OK
Rancangan tampilan Laporan Lock Key aplikasi Anak Kunci Bluetooth
Anak Kunci Bluetooth Error Maaf Anda belum terdaftar. Jika Anda yakin telah mendaftar, pastikan ponsel dan kata sandi yang Anda gunakan sesuai dengan yang Anda daftarkan
!
OK Rancangan pesan kesalahan mengunakan ponsel atau kata sandi yang berbeda
Anak Kunci Bluetooth Error
Untuk sementara kunci Anda diblokir, silahkan hubungi administrator
! OK
Rancangan pesan kesalahan sedang di blokir. Anak Kunci Bluetooth Error
Pada saat ini Anda tidak memiliki hak untuk mengakses
! OK
Rancangan pesan kesalahan waktu penggunaan
Anak Kunci Bluetooth Error
Anda tidak memiliki hak untuk mengakses kunci ini
! OK
Rancangan pesan kesalahan nomor Kunci
LAMPIRAN 6 SPESIFIKASI TABEL APLIKASI KONTROL KUNCI BLUETOOTH Tabel User Nama Field
Tipe Data
Ukuran Field
No_BT
Text
24
Nama
Text
20
No_Seluler
Text
30
Password
Text
32
Kunci
Text
3
Waktu
Text
7
Status
Text
20
Nama Field
Tipe Data
Ukuran Field
Waktu
DateTime
Nama
Text
20
History
Text
100
Keterangan
Primary Key
Tabel History Keterangan
LAMPIRAN 7 RANCANGAN TAMPILAN APLIKASI KONTROL KUNCI BLUETOOTH
Kontrol Kunci Bluetooth Register
History
Edit
Help
X
About
Exit
Nama
:
Senin
Selasa
No IMEI
:
Rabu
Kamis
No Seluler
:
Jumat
Sabtu
Password
:
Minggu
Ulangi Password
:
DAFTAR
BATAL
Kunci 1 Kunci 2 Kunci 3
Rancangan Tampilan Menu Register aplikasi Kontrol Kunci Bluetooth
Kontrol Kunci Bluetooth Register
History
Edit
Filter
Help
Berdasarkan
Tanggal
Jam
Tanggal
Pengguna
X
About
Exit
V History
Rancangan Tampilan Menu History aplikasi Kontrol Kunci Bluetooth
Kontrol Kunci Bluetooth Register
History
Edit
Help
X
About
Exit
Nama
:
Senin
Selasa
No IMEI
:
Rabu
Kamis
No Seluler
:
Jumat
Sabtu
Password
:
Minggu
Ulangi Password
:
EDIT BATAL
Aktif Blokir
Kunci 1 Kunci 2 Kunci 3
Rancangan Tampilan Menu Edit User aplikasi Kontrol Kunci Bluetooth
LAMPIRAN 8 RANGKAIAN SIMULASI GEMBOK KUNCI BLUETOOTH 13 25 12 24
LED = Light Emmiting Dioda (Sebagai Gembok Kunci Bluetooth)
11 23 10 22 9 8 20 7 19 6 18 5 17
LED 1
4 16 3 15 2 14
LED 2
1 DB25 (Female)
LED 3 Rangkaian Simulasi Gembok Kunci Bluetooth.
LAMPIRAN 10 TAMPILAN APLIKASI ANAK KUNCI BLUETOOTH
Tampilan pembukaan Aplikasi Anak Kunci Bluetooth
Tampilan utama Aplikasi Anak Kunci Bluetooth
Tampilan Menu Aplikasi Anak Kunci Bluetooth
Tampilan sedang mencari device Bluetooth Aplikasi Anak Kunci Bluetooth
Tampilan Aplikasi Anak Kunci Bluetooth menemukan device Bluetooth
Tampilan konfirmasi Aplikasi Anak Kunci Bluetooth untuk melakukan koneksi dengan device Bluetooth yang ditemukan
Tampilan Aplikasi Anak Kunci Bluetooth tidak menemukan device Bluetooth. Atau device Bluetooth pada ponsel belum aktif
Tampilan Laporan Open Key Aplikasi Anak Kunci Bluetooth
Tampilan Laporan Close Key Aplikasi Anak Kunci Bluetooth
Tampilan Pesan Kesalahan kesalahan mengunakan ponsel atau kata sandi yang berbeda
Tampilan Pesan Kesalahan tidak memiliki hak akses nomor kunci
Tampilan Pesan Kesalahan tidak menemukan nomor kunci
Tampilan Pesan Kesalahan tidak memiliki hak akses pada saat hari pengaksesan
Tampilan Pesan Kesalahan sedang di blokir
Tampilan menu history Aplikasi Anak Kunci Bluetooth
Tampilan menu Help Aplikasi Anak Kunci Bluetooth
LAMPIRAN 11 TAMPILAN APLIKASI KONTROL KUNCI
Tampilan menu About Aplikasi Kontrol Kunci Bluetooth
Tampilan menu History Aplikasi Kontrol Kunci Bluetooth
Tampilan menu Register Aplikasi Kontrol Kunci Bluetooth
Tampilan menu Edit User Aplikasi Kontrol Kunci Bluetooth
LAMPIRAN 12 REFERENSI DARI INTERNET
http://www.benhui.net/modules.php?name=Bluetooth&page=C onnect_PC_Phone_Part_1.html. Connecting PC and Phone with Java Bluetooth API – Part 1
Writing and Connecting a J2SE app on PC to a MIDlet on Phone, using XP, USB dongle, BlueCove Stack, and a Nokia 6600 Date: Nov 21, 2004 Author: Ben Hui
Installments Part Part Part Part Part
0 1 2 3 4
– – – – –
Introduction and development options (not done) Writing and Connecting a J2SE app on PC to a MIDlet on Phone (this article) Writing and Connecting MIDlet on PC to a MIDlet on Phone (not done) Connecting 3 (or more) devices together (not done) Doing all these in Linux (not done)
What you need and How to setup
In order to run through this tutorial, you will need the following hardware and software installed. A PC with Windows XP SP2 installed Everything here is based on Windows XP platform and requires Service Pack 2 installed. SP 2 gives you the Microsoft Bluetooth Stack which BlueCove is developed on.
Can I use SP 1 instead? Read this article and it may help you. What if Microsoft Bluetooth Stack is not installed? How do I tell?
An USB Bluetooth Dongle Obviously you need a Bluetooth dongle. I use a USB dongle. It may also work with a Serial Port dongle, but I am not entirely sure. If you have tried it, let me know. A SDK for MIDlet development I simply suggest SUN WTK 2.2 beta 2. BlueCove Stack You must have BlueCove library installed. Download BlueCove from sourceforge.net. Extract the zip file. Copy the file intelbth.dll to your C:\Windows\System32 directory. You will need to compile the Java source files in BlueCove, but there is a bug in BlueCove (see below section). So I suggest you download this compiled and patched version. A SDK for J2SE development You can use J2SE SDK download from SUN. You can also use Eclipse or NetBeans. Benhui.net Serial Port Profile (SPP) example code There are two examples you need to download. One is the J2SE BlueCove SPP application. Using the J2SE SPP application, you can run it as a SPP server as well as a SPP client. Another one is the J2ME MIDlet SPP application. We are using the MIDlet from our Bluetooth Code Gallery examples. There are many MIDlets in the package, we are only interested in the SPP example for BlueCove interaction.
Download J2SE Benhui.net BlueCove SPP example Download J2ME Benhui.net Bluetooth Code Gallery examples
Compile and Run Instruction After you download the J2SE BlueCove example package, follow these instructions
Extract the zip file content to a project folder. Launch a command prompt, go to the project folder, run compile.bat file to compile the source files. Run run.bat to run the J2SE example.
Note, if you do not see compile.bat or run.bat, you probably have the old zip file. Download it again here. After you download the J2ME Bluetooth Code Gallery example package, follow these instructions. (Assume you have installed WTK to C:\WTK22 directory)
Launch KToolbar from Start menu Press New Project button Enter BTGalleryExample in Project Name Enter net.benhui.btgallery.spp_gui.SPP_MIDlet in MIDlet Class Name, then press Create Project button
In the Settings for project "BTGalleryExample" dialog, select Bluetooth/OBEX for J2ME (JSR82) check box in Additional APIs section
Extrat the zip file content to C:\WTK22\apps\BTGalleryExample\src directory
Transfer the JAR file to your mobile phone and install it. Run the MIDlet application together with the J2SE example above.
Press Build button Open Project menu, select Package item and then Create Package item. This will create the necessary JAD and JAR file in the bin directory.
To run through the client and server example, follow these example interactions on PC side and the Phone side. Which Device
Action
Respond
PC
Start the PC application from your You will see the main menu IDE
PC
Press ‘0’ and enter
Start the server, you will see a page of logging, and the last line should be ‘local service waiting for client connection...’
Phone
Start Serial Port MIDlet
Phone
Select ‘Run Serial Client’ from menu
Phone
Highlight the PC device and select The phone sends a string to the ‘Select’ from menu server
PC
The PC accepts a connection, receives a string and sends it back to the client
Phone Phone
The phone starts searching for the PC.
The phone receives a string Select ‘Start Serial Server’ from menu
The Phone starts the server
PC
Press ‘1’ and enter
The PC starts searching for the phone. After a while, you will see a menu of found devices.
PC
Press ‘the number that represent
The PC connects to the Phone and
your phone’ and enter Phone
sends a string to it. The Phone accepts a connection, receives a string, and sends it back to PC
PC
The PC receives a string
Design Overview
How to write PC-based Java applications that access Bluetooth connectivity is probably the most asked question that I have seen in Java Bluetooth development. The problem is the lack of Java Bluetooth stack, which serve as a bridge between Java programs and Bluetooth hardware. Microsoft Bluetooth Stack API and BlueCove are solutions that fit into this picture. Microsoft stack API is a socket-style (WinSock to be exact) C API that allow any C-based applications to operate a generic USB Bluetooth dongle. However, there isn’t a Java version of this API. BlueCove developers see the missing pieces and developed a JSR-82 API on top of Microsoft API. The integration between BlueCove and Microsoft API is done via JNI, a technology for Java applications to use native C based library. BlueCove API is based on JSR-82 API, which make it a very open and friendly API to existing Bluetooth developers. From what I have observed so far, BlueCove supports the following Bluetooth profiles:
General Access Profile (with some limitation) Service Discovery Profile Serial Port Profile
The following layer diagram represents the architecture of BlueCove and communication with a Phone. J2SE PC Application
J2ME MIDlet Application
BlueCove JSR-82 API
KVM JSR-82 API
BlueCove-Bluetooth WinSock API (JNI) MS Bluetooth Stack USB Bluetooth Dongle
Phone OS Stack (e.g. Symbian OS) <- Bluetooth ->
Phone Bluetooth Chipset
Writing the PC Bluetooth application
The beauty of BlueCove is its partial compatibility with JSR-82 (a.k.a. Java Bluetooth API). If you are already familiar with JSR-82, programming with BlueCove is a breeze. In most cases, you can simply port your JSR-82 based application over to BlueCove with little modification. This is exactly what I did with the SPP (Serial Port Profile) examples from Code Gallery. If you know very little about JSR-82, you can ramp up by reviewing the articles from Nokia, Sony Ericsson, SUN or by me To start with, I bring in the source code of SPP examples, which consist of 3 modules. Bluelet module is a reusable component for rapid Bluetooth MIDlet development. SPP Client is a simple Bluetooth client to interact with SPP Server. All it does is send a string to the server and wait for a string response. SPP Server is also a simple Bluetooth server that echoes a received string back to the client. The only problem now is that all of these components are intended to run on J2ME platform and they have dependency to J2ME API. In particular, they are linked to MIDP API and use MIDP GUI for user interaction. All of these dependencies must be removed and replaced with a J2SE counterpart. To simplify the migration, I avoid using J2SE GUI (i.e. Swing) and choose a console based interaction model. I spent about an hour to remove all the dependency to MIDlet and MIDP API, and replace all of them with simple System.out and System.in interaction. As a result, all the logging will be output to console and the application expects user to enter commands via the console session. A PC-based Bluetooth application is ready to go. Now, we need to get the phone ready.
When you run PC application, it presents you a text menu, where you enter commands by entering the number. For example, in the main menu
[0]Start Serial Server [1]Run Serial Client [2]Exit
Enter ‘0’ to execute the server code. You will see a lot of logging and the menu will be shifted out of screen. You can scroll back to see what the menu options were. You can find an example in next section.
Writing the MIDlet application
The phone part is even easier because all I need to do is getting a MIDlet running on a JSR-82 enabled phone. My testing device is a Nokia 6600, one of the first phones to support JSR-82 API. Naturally, I picked the SPP example MIDlet as it has the exact same behavior as our PC SPP application. I installed the MIDlet JAR file onto the phone, and start applications on both sides. Things went fine on both sides. They can discover both parties and send strings to each other, but not without any glitches though. See the next section for problems and bugs. To quickly conclude my experience, majority of my time is spent installing the Microsoft Bluetooth stack properly and to track down one of the bugs below. Thanks to its support of JSR-82 API, programming with BlueCove is fairly effortless and standard across the platforms. There are limitations in BlueCove, which make it difficult to replace Bluetooth applications that utilize native stacks; nevertheless, I can think of number of good usages for Java-based applications. Many people have asked if it is possible to develop a PC application that push or exchange files (such as text files, media files etc) with the phone, the answer is a big no with a small yes. Typically, pushing or exchanging files correspond to OBEX Push Profile and OBEX File Transfer Profile, and both are not support in BlueCove or existing phones. The small yes comes from the scenario where you can pragmatically read in file content and send it across as a bye stream over Serial Port Profile. In the other words, you could send a file content via Serial Port Profile, but not via OBEX protocol.
BUG
Factor
Problem
When I use the phone to search PC service using L2CAP UUID, the phone crashes with Monty-Thread error -6 Resolution Search service using RFCOMM UUID instead, or other custom defined UUIDs Bug factor Problem
When the PC perform device inquiry, it always return a list with cached devices. In the order words, you may get a list of non-existing devices that were previously inquired Resolution There is no resolution. Just don't pick the devices that ain't available. Bug factor Problem
When the PC retrieve service record of a MIDlet registered service (i.e. not the phone native Bluetooth apps), the service record is always empty. Resolution The bug is in BlueCove source code SDPInputStream.readElement() method. It constructs a UUID with a 'true' flag, where it should be using 'false' flag in the UUID constructor. You can download my patched binary. Bug factor
Problem
When the PC initiate a connection to phone using Connector, it always failed with "Failed to open socket" IOException. Resolution When the PC initiate the connection, the URL must use authenticate=true attribute.
Otherwise, it cannot connect. Bug factor
Problem Many JSR-82 API is not available in BlueCove, and my application cannot compiles. Resolution BlueCove has its limitation, and not all JSR-82 required features is available in BlueCove. For example, DeviceClass and friendy name is not supported. Getting RemoteDevice.getRemoteDevice(Connection) is also not supported. I have uncomment those unsupported API and fill with dummy implementations. You can download my patched binary. Bug factor
How do I tell if Microsoft Bluetooth Stack installed? (new!) To run the examples of this article, you MUST have Microsoft Bluetooth Stack installed. This stack will be installed to your system when you install Windows XP SP2 (see earlier section for download links). If you have other stack (such as Widcomm stack) installed, you will need to uninstall it in order for Microsoft Bluetooth stack to take place. To check that you have it installed properly, go to Device Manager and you should see the following. If you see anything other than what I circled below, your Microsoft Bluetooth stack is NOT working and my BlueCove will not work.
And when you right click on the Bluetooth icon on the task bar, you should see the following:
http://www.geocities.com/Juanga69/parport/. Parallel Printer Port Access through Java Have you ever tried to access the parallel port (printer port) inside a Java program? Well, if you have, you have probably already downloaded the commapi package that sun offers to perform this task, or tried using portio or any other thing that might resolve your problem. The fact that you are here indicates that none of these programs seem to work! And we need a solution... fast! Well folks, here it is [Windows - Linux]. It turns out that you can write code in C and Java can use it through the Java Native Interface (JNI). Take a look at the installation instructions to setup ParallelPort on your PC [Windows - Linux]. ParallelPort is a simple Java class that enables you to read and write bytes to and from the parallel ports on your computer. I have personally tested it on Windows 9x platforms with different types of processors (mainly Intel 486, Pentium MMX, Pentium II), and it presented me with no problems (send me an email if you are having problems). It can also run under Windows NT (and the like) but you need to install a kernel mode driver (see UserPort, below).
What you will find here:
I have programmed parport to be able to access the parallel port on my computer. (new: Linux version now available!) API documentation for ParallelPort. Example programs that use the parallel port (SimpleIO.java, Joystick.java). Real life projects that use ParallelPort. UserPort : a Windwos NT/2000/XP kernel mode driver for direct port I/O. You need to install UserPort if you plan to use Windows NT based operating systems. Links to web sites and people that helped me complete this project. And that is pretty much it.
Projects that use ParallelPort
DynaTour (by Nasron Cheong): The DynaTutor is a 5-axis arm robot that was origininally designed to be an introduction to computer interfacing. This project aims to rebuild the hardware driver for the robot and reimplement new software drivers. Finally, the combination of the two, along with some inverse kinematics, will be used to create a robot that will move chess pieces. The hardware is implemented on a prototyping board using a programmable logic device from Altera and some power drivers. The software is written in Java and employs a multithreaded mechanism to drive each motor 'concurrently'.
The Xobsen (by Elisha): The Xobsen is an interface between NES controllers and your PC audio software. It allows one of 6 midi messages to be associated with a button: note on, note off, controlller 00 increment/decrement, controller 01 increment/decrement. The user
is able to select the MIDI out device but not the midi channel. Currently, the midi channel is the same as the port number on the xobsen.
Legacy Film to DVD Project (by Jim Carroll): This project has been ongoing for a year now. In brief it has been my attempt to convert my parents library of legacy super-8 mm film to DVD. I have actually got this working and have scanned several 400 foot rolls of film. If you want to learn how I did this and/or see some of the results, then read on.
NOTE: If you have used ParallelPort and want to be famous like the people above, document your project, take some pictures, put it up on the web and send me the link! I'll add your project here. Links
Interfacing the PC Parallel Port: http://www.beyondlogic.org/spp/parallel.htm Java native interface tutorial: http://java.sun.com/docs/books/tutorial/native1.1/TOC.html Computing.net Q&A forum: http://www.computing.net Java from sun microsystems: http://www.java.sun.com Ian Harries's Digital Joystick page: http://www.doc.ic.ac.uk/~ih/doc/joystick/
http://www.geocities.com/Juanga69/parport/install.html.
ParallelPort Installation Instructions 6. Download parport-win32.zip to your computer. 7. Unzip the file parport-win32.zip. This will produce a hierarchy with a top level directory parport containing the class and source files (along with parport.dll, VC source files, and example programs). This directory (parport) should go in your "Java classes" directory. In other words, it should go in a directory contained in your CLASSPATH. The examples in this document assume that you have unzipped the parportwin32.zip file in your C:\java\classes directory and that your JDK installation is in C:\jdk1.4.1. If you have installed JDK in an other location or unzipped ParallelPort-win32.zip in an other location modify the example commands appropriately. 8. Copy parport.dll to your <JDK>\bin directory (or any other directory included in your system’s PATH): C:\>copy c:\java\classes\parport\parport.dll c:\jdk1.4.1\bin 9. Add parport to your CLASSPATH: If you don't have a CLASSPATH defined: C:\>set CLASSPATH=c:\java\classes
If you already have a CLASSPATH defined, then your Java classes directory is most probably already there, and the compiler will find parport easily. In case it's not, you can do this: C:\>set CLASSPATH=c:\java\classes;%CLASSPATH%
10. If you have Windows NT (or higher) then you need to install UserPort. It is a Windwos NT/2000/XP kernel mode driver for direct port I/O. You need to install UserPort if you plan to use Windows NT based operating systems.
LAMPIRAN 13 LISTING PROGRAM
A. Listing Program Anak Kunci Bluetooth A.1. BTKey.java /* * BTKey.java * Created on Maret 15, 2008, 1:54 AM * Dibuat oleh: * Nama: Audi Nantan * NIM : 01403-039 * Program Studi Teknik Elektro * Fakultas Teknologi Industri * Universitas Mercu Buana * sebagai program tugas akhir dengan judul Tugas Akhir: * SIMULASI KUNCI ELEKTRIK DENGAN ENKRIPSI MELALUI BLUETOOTH PADA PONSEL * */ import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.rms.*; import javax.bluetooth.*; import java.io.*; public class BTKey extends MIDlet implements CommandListener{ public static Display display; public static Form fPassword, fHelp, fAbout, fTest; Intro fIntro; private static boolean History=false; private static TextField tfNoKunci, tfPass, tfNoSel; RecordStore db; private final Command openCmd=new Command("Open/Close",Comma nd.OK,1); private final Command historyCmd=new Command("History",Command. HELP,2); private final Command helpCmd=new
Command("Help",Command.HELP, 20); private final Command aboutCmd=new Command("About...",Command.HE LP,21); private final Command exitCmd=new Command("Exit",Command.EXIT,9 0); private final Command backCmd=new Command("Back",Command.BACK ,91); //Command untuk testing private final Command adrsCmd=new Command("Bluetooth ID",Command.ITEM,50); private final Command TesMD5Cmd=new Command("TesMD5",Command.IT EM,51); private final Command psnCmd=new Command("Message2Send",Comma nd.ITEM,52); //----------------------------------------------------------------------------//dari benhui...>>>>>>>>>>>>>>>>> BLUElet bluelet = null; public static BTKey instance; SPP_Client spp_client = null; public final static UUID uuid = new UUID("F1123F1123F1123F1123F1 123F1123F1", false); public BTKey() { instance = this; String noSel="", noKun=""; try{ db = RecordStore.openRecordStore("Sel Key",false); noSel = StringDari(db.getRecord(1));
noKun = StringDari(db.getRecord(2)); db.closeRecordStore(); }catch (RecordStoreException e){} tfNoKunci = new TextField("Nomor Kunci", noKun ,2,TextField.NUMERIC); tfPass = new TextField("Password","", 20,TextField.PASSWORD); tfNoSel = new TextField("Nomor Kartu Seluler", noSel ,15 ,TextField.NUMERIC); } //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> public void startApp() { ///dari benhui.... bluelet = new BLUElet( this, this ); bluelet.startApp(); spp_client = new SPP_Client(); /////////////////////////////////////////////////////////////// ///////// display = Display.getDisplay(this); set_fIntro(); } public void pauseApp() { } public void destroyApp(boolean unconditional) { notifyDestroyed(); } // aksi-aksi setiap pemilihan menu void set_fIntro(){ fIntro = new Intro(this); display.setCurrent(fIntro); } void set_fPassword(){ fPassword= new Form("Bluetooth Key"); fPassword.append(tfPass); fPassword.append(tfNoSel); fPassword.append(tfNoKunci); fPassword.addCommand(exitCmd); fPassword.addCommand(openCmd); fPassword.addCommand(historyCmd); fPassword.addCommand(helpCmd);
110
fPassword.addCommand(aboutC md); //Add Command Testing fPassword.addCommand(adrsCm d); fPassword.addCommand(psnCm d); fPassword.addCommand(TesMD 5Cmd); //------------------------------------fPassword.setCommandListener(t his); display.setCurrent(fPassword); }
fAbout.addCommand(backCmd); fAbout.append(isiAbout);
alert("Bluetooth belum aktif\n(" + e.getMessage() + ")", display.getCurrent()); } MD5Digest digest = new MD5Digest();
fAbout.setCommandListener(this); display.setCurrent(fAbout); }
String Hash_KS = new String(digest.calculate(tfPass.getString())); String P=null;
//Aksi aksi testing.
if (History==true){ P = tfNoSel.getString()+"HS"; History=false; }else if (tfNoKunci.getString().equals("")){ P = tfNoSel.getString()+"00"; } else if (tfNoKunci.getString().length()==1){ P= tfNoSel.getString()+"0"+tfNoKunci.getStri ng(); }else if (tfNoKunci.getString().length()==2){ P= tfNoSel.getString()+tfNoKunci.getString(); } String PE = doRC4.enkrip(Hash_KS, P); String RC4NoBT = doRC4.enkrip(Hash_KS, local.getBluetoothAddress()); String PK = RC4NoBT+PE;
fAbout = new Form("About...");
void TestMD5(){ MD5Digest digest = new MD5Digest(); fTest = new Form ("Testing MD5"); fTest.addCommand(backCmd); fTest.append("MD5 dari Password Anda Adalah: "+ digest.calculate(tfPass.getString()));
void openKey(){ //>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>> dari benhui..... bluelet.startInquiry( DiscoveryAgent.GIAC, new UUID[]{ uuid } ); display.setCurrent( bluelet.getUI() ); //>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>> simpanNoSel(); } void set_fHistory(){ History = true; bluelet.startInquiry( DiscoveryAgent.GIAC, new UUID[]{ uuid } ); display.setCurrent( bluelet.getUI() ); } void set_fHelp(){ InputStream HelpTxt = openData("/Help.gun"); String isiHelp = readData(HelpTxt); closeData(HelpTxt); fHelp = new Form("Help"); fHelp.addCommand(backCmd); fHelp.append(isiHelp); fHelp.setCommandListener(this); display.setCurrent(fHelp); } void set_fAbout(){ InputStream AboutTxt = openData("/About.gun"); String isiAbout= readData(AboutTxt); closeData(AboutTxt);
fTest.setCommandListener(this); display.setCurrent(fTest); } void alamatBT(){ fTest = new Form ("Alamat Bluetooth Ponsel Ini adalah:"); fTest.addCommand(backCmd); fTest.setCommandListener(this); display.setCurrent(fTest);
return PK; LocalDevice local = null; try { local = LocalDevice.getLocalDevice(); } catch (BluetoothStateException e) { fTest.append("Bluetooth belum aktif\n(" + e.getMessage() + ")"); return; } fTest.append("Address: " + local.getBluetoothAddress() + "\n"); } void pesan(){ fTest = new Form ("Pesan yang akan dikirimkan:"); fTest.addCommand(backCmd); fTest.setCommandListener(this); display.setCurrent(fTest); fTest.append(new String (isiPesan())); } public String isiPesan(){ LocalDevice local = null; try { local = LocalDevice.getLocalDevice(); } catch (BluetoothStateException e) {
} //procedure untuk bata tulis nokartu di RMS private void simpanNoSel(){ try{ byte[] byteSel = byteDari (tfNoSel.getString()); byte[] byteKey = byteDari (tfNoKunci.getString()); db = RecordStore.openRecordStore("SelKey",fa lse); db.setRecord(1, byteSel, 0, byteSel.length); db.setRecord(2, byteKey, 0, byteKey.length); db.closeRecordStore(); }catch (RecordStoreException e){ NoSelBaru(); } } private void NoSelBaru(){ try{ byte[] byteSel = byteDari (tfNoSel.getString()); byte[] byteKey = byteDari (tfNoKunci.getString()); db = RecordStore.openRecordStore("SelKey",tr ue);
111
db.addRecord(byteSel, 0, byteSel.length); db.addRecord(byteKey, 0, byteKey.length); db.closeRecordStore(); }catch (RecordStoreException e){} }
isiData.append((char)buff ); } }catch(IOException ioe){}; return(isiData.toString());
private byte[] byteDari (String data){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); try{ dos.writeUTF(data); }catch (IOException e){} return baos.toByteArray(); } private String StringDari (byte[] data){ String a=""; ByteArrayInputStream bais = new ByteArrayInputStream(data); DataInputStream dis = new DataInputStream (bais); try { a = dis.readUTF(); }catch (IOException e){} return a; } // Prosedure untuk membaca Files Text public InputStream openData(String filename){ return(getClass().getR esourceAsStream(filename)); } public String readData(InputStream data){ StringBuffer isiData=new StringBuffer(); int buff=0; try{ while(buff!=-1) {
else if(c==helpCmd) set_fHelp(); else if(c==aboutCmd) set_fAbout(); else if(c==TesMD5Cmd) TestMD5(); else if(c==adrsCmd) alamatBT(); else if(c==psnCmd) pesan();
buff=data.read();
} public void closeData(InputStream data){ try{ data.close(); }catch(IOException ioe){}; } // perintah untuk melakukan aksi untuk setiap pilihan menu..... public void commandAction(Command c,Displayable d){ //////////////////////////////dari benhui........................... if ( c.equals( BLUElet.COMPLETED ) ){ display.setCurrent( fPassword ); Thread t = new Thread( new jalankanClient() ); t.start(); } else if ( c.equals( BLUElet.SELECTED ) ) { display.setCurrent( fPassword); } else if ( c.equals( BLUElet.BACK ) ) { display.setCurrent( fPassword ); } ///////////////////////////////////////////////////// //////////////////////////// if (c==exitCmd) destroyApp(true); else if(c==backCmd)display.setCurrent(f Password); else if(c==openCmd) openKey(); else if(c==historyCmd) set_fHistory();
} // >>>>>>>>>>>>>>>>>>>>>>> procedure dari benhui........... public static void quitApp() { instance.destroyApp(true); instance.notifyDestroyed(); instance = null; } public static void log(String s) { System.out.println(s); alert(s,fPassword); } public static void alert( Exception e, Displayable next_screen ) { Alert alert = new Alert( "Kunci Bluetooth", "Exception: "+e.getClass().getName()+" "+e.getMessage(), null, AlertType.INFO ); alert.setTimeout( Alert.FOREVER ); display.setCurrent( alert, next_screen ); } public static void alert( String m, Displayable next_screen ) { Alert alert = new Alert( "Kunci Bluetooth", m, null, AlertType.INFO ); alert.setTimeout( Alert.FOREVER ); display.setCurrent( alert, next_screen ); } public class jalankanClient implements Runnable { public void run() { spp_client.send_SPP_message( bluelet.getFirstDiscoveredService(), isiPesan() ); } } /////////////////////////////////////////////////////////////// //// }
A.2. Intro.java /* * Intro.java * Created on Maret 15, 2008, 11:58 AM * Dibuat oleh: * Nama: Audi Nantan * NIM : 01403-039 * Program Studi Teknik Elektro * Fakultas Teknologi Industri
* Universitas Mercu Buana * sebagai program tugas akhir dengan judul Tugas Akhir: * SIMULASI KUNCI ELEKTRIK DENGAN ENKRIPSI MELALUI BLUETOOTH PADA PONSEL */ import javax.microedition.lcdui.*;
import java.util.*; import java.io.*; public class Intro extends Canvas{ BTKey midlet; Image covIntro; Timer delayIntro = new Timer();
112
TimerTask mulaiPass= new mulai(); public Intro(BTKey midlet) { this.midlet=midlet; try { covIntro=Image.createImage("/Intro.p ng"); } catch(Exception e) { e.printStackTrace();
} }
delayIntro.schedule(mulaiPass,2000); }
public void paint(Graphics g) { g.setColor(0xFFFFFF); g.drawImage(covIntro,0,0, Graphics.TOP|Graphics.LEFT); g.setColor(0xFF0000); setFullScreenMode(true);
class mulai extends TimerTask{ public void run(){ midlet.set_fPassword(); } } }
B. Listing Program Kontrol Kunci Bluetooth B.1. FormUtama.java /* * FormUtama.java * Created on Maret 25, 2008, 5:37 PM * Dibuat oleh: * Nama: Audi Nantan * NIM : 01403-039 * Program Studi Teknik Elektro * Fakultas Teknologi Industri * Universitas Mercu Buana * sebagai program tugas akhir dengan judul Tugas Akhir: * SIMULASI KUNCI ELEKTRIK DENGAN ENKRIPSI MELALUI BLUETOOTH PADA PONSEL */ import java.awt.*; import java.awt.event.*; import java.io.*; import java.sql.*; import java.applet.*; import java.util.Calendar; import java.lang.Math; import java.net.URL; import javax.swing.*; import javax.swing.border.Border; import javax.swing.border.TitledBorder; import javax.bluetooth.*; import javax.microedition.io.*; import parport.ParallelPort;
public class FormUtama extends javax.swing.JFrame implements Runnable{ public FormUtama(){ cekDriver.cekDriver(); initComponents(); Image icon = Toolkit.getDefaultToolkit().getImage( "BTKey.PNG"); setIconImage(icon);
lpt1.write(0); panelIsi.add(panelRegister); panelIsi.add(panelHistory); panelIsi.add(panelEdit); panelIsi.add(panelAbout); clearPanel(); isipanelKunci(); panelAbout.setVisible(true); FormAbout.soundAbout.loop(); pack(); run_server(); } public static void main(String args[]) throws java.net.MalformedURLException { soundBuka = Applet.newAudioClip(new URL(urlBuka)); soundTutup = Applet.newAudioClip(new URL(urlTutup)); java.awt.EventQueue.invokeLater(ne w Runnable() { public void run() { new FormUtama().setVisible(true); } }); } public void run() { String appName = "KontrolKunciBluetooth"; // human friendly name of this service // connection to remote device StreamConnection c = null; try { String url = "btspp://localhost:" + uuid.toString() +";name="+ appName; server = (StreamConnectionNotifier)Connecto r.open( url );
ServiceRecord rec = device.getRecord( server ); // Set the Major Service Classes flag in Bluetooth stack.We choose Telephony Service rec.setDeviceServiceClasses( SERVICE_TELEPHONY ); } catch (Exception e) { if (e.getMessage().equals("Failed to bind socket")) { JOptionPane.showMessageDialog(nul l,e.getMessage()+ "\nDevice Bluetooth tidak ditemukan."+ "\njadi Kontrol Kunci Bluetooth Belum dapat"+ "\n menerima perintah dari Client (Ponsel)."+ "\n\nAgar Dapat Menerima perintah dari Client,"+ "\nAktifkan Divece Bluetooth dan restart Kontrol Kunci Bluetooth",e.getClass().getName(),1); }else { JOptionPane.showMessageDialog(nul l,e.getMessage(),e.getClass().getNam e(),1); } notifyAll(); } while( !done) { try { // start accepting client connection. This method will block until a client connected c = server.acceptAndOpen(); // retrieve the remote device object RemoteDevice rdev = RemoteDevice.getRemoteDevice( c ); // obtain an input stream to the remote service
113
DataInputStream in = c.openDataInputStream(); // baca in sebagai PK (perintah kiriman dari Hape) String PK = in.readUTF(); //verifikasi PK, menghasilkan output yang akan dikirimkan ke Hape String ps2HP = verifikasi(PK); DataOutputStream out = c.openDataOutputStream(); out.writeUTF( ps2HP ); out.flush(); // close current connection, wait for the next one c.close(); } catch (Exception e) { JOptionPane.showMessageDialog(nul l,e); } } } public void run_server() { try { device = LocalDevice.getLocalDevice(); device.setDiscoverable(DiscoveryAg ent.GIAC); Thread t = new Thread( this ); t.start(); } catch ( BluetoothStateException e) { e.printStackTrace(); } } public String verifikasi(String PK){ //deklarasi variabel pesan yang akan dikembalikan ke hape String ps2HP = ""; //pecah pk (pesan kiriman hape) menjadi: //-RC4NoBT (RC4 dari No BT) //-PE (pesan yang dienkripsi) String RC4NoBT = PK.substring(0, 24); String PE = PK.substring(24, PK.length()); //cari BT dalam database. kalau ketemu lakukan verifikasi kalau ga ps2HP disisi Anda belum terdaftar. try { java.sql.Connection conn = DriverManager.getConnection("jdbc: mysql://localhost/kontrolkuncibluetoo th?user=&password=");
String kueri = "select * from tbuser where NoBT = '" + RC4NoBT + "'" ; ResultSet rs = conn.createStatement().executeQuery (kueri); rs.first(); String Nama = rs.getString("Nama"); String BT = rs.getString("NoBT"); String Password = rs.getString("Password"); String Waktu = rs.getString("Waktu"); String Kunci = rs.getString("Kunci"); String Status = rs.getString("Status"); String Seluler = doRC4.dekrip(Password,rs.getString( "NoSeluler")); //Pecah PE (Pesan enkrip) untuk mendapatkan NoKS(no. seluler)dan NoGKB(no.Kunci) String P = doRC4.dekrip(Password, PE); String NoKS = P.substring(0, P.length()-2); String NoGKB = P.substring(P.length()-2, P.length()); //identifikasi hari ini int hari = Calendar.getInstance().getTime().get Day(); if (hari==0)hari=7; //identifikasi hari yang boleh mengakses String hariAkses = ""; if (Waktu.substring(0,1).equals("Y")) hariAkses = hariAkses+" Senin"; if (Waktu.substring(1,2).equals("Y")) hariAkses = hariAkses+" Selasa"; if (Waktu.substring(2,3).equals("Y")) hariAkses = hariAkses+" Rabu"; if (Waktu.substring(3,4).equals("Y")) hariAkses = hariAkses+" Kamis"; if (Waktu.substring(4,5).equals("Y")) hariAkses = hariAkses+" Jumat"; if (Waktu.substring(5,6).equals("Y")) hariAkses = hariAkses+" Sabtu"; if (Waktu.substring(6,7).equals("Y")) hariAkses = hariAkses+" Minggu"; hariAkses = hariAkses +"."; //verifikasi Nomor Kunci //-jika kunci = 00.... artinya belun memasukan nomor kunci...
//-jika kunci = HS.... artinya ingin mengakses history... //-jika kunci tidak ditemukan PS2HP=kunci tidak ditemukan if (NoGKB.equals("00")){ ps2HP = Nama+", Anda Belum Memasukan Nomor Kunci yang Ingin Dibuka"; FormHistory.simpan (Nama, "Tidak memasukan nomor kunci yang ingin dibuka"); } else if (NoGKB.equals("HS")){ kueri = "select * from tbHistory where Nama = '" + Nama+"'"; ResultSet hasilKueri = conn.createStatement().executeQuery (kueri); hasilKueri.afterLast(); String Pesan=""; int i=0; while ((hasilKueri.previous()) && i < 10){ Pesan = Pesan + hasilKueri.getString("Waktu")+"\n"; Pesan = Pesan + hasilKueri.getString("History")+"\n\n "; i++; } ps2HP = Nama+",\n\n"+ Pesan; FormHistory.simpan (Nama, "Lihat History"); } else if (getGKB(NoGKB)>Kunci.length()){ ps2HP = Nama+", Maaf Kontrol Kunci Bluetooth Tidak Menemukan Kunci "+ NoGKB; FormHistory.simpan (Nama, "Ingin membuka Kunci "+NoGKB+" (Kunci Tidak Ditemukan)"); } //verifikasi kalau semua sudah benar buka kunci else if ( (!(Status.equals("Blokir"))) && (NoKS.equals(Seluler)) && (Waktu.substring(hari-1, hari).equals("Y")) && (Kunci.substring(getGKB(NoGKB)1, getGKB(NoGKB)).equals("Y"))){ buka_tutup(btKunci[getGKB(NoGK B)-1], Nama, NoGKB); if (btKunci[getGKB(NoGKB)1].getIcon()==GKBTutup) ps2HP =
114
Nama + ", Kunci " +NoGKB+" Telah DiTutup"; else if (btKunci[getGKB(NoGKB)1].getIcon()==GKBBuka) ps2HP = Nama + ", Kunci " +NoGKB+" Telah Dibuka"; } //jika nomor kunci salah 3x blokir else if (Kunci.substring(getGKB(NoGKB)1, getGKB(NoGKB)).equals("N")){ if (Status.equals("Aktif")){ ps2HP = Nama+", Anda Tidak Memiliki Hak Akses untuk Kunci "+ NoGKB+"!! Masukan Nomor Kunci Yang Benar."; FormHistory.simpan (Nama, "Salah I, Berusaha membuka Kunci "+NoGKB); kueri = "update tbuser set Status = 'Salah I' where NoBT= \""+BT +"\""; }else if (Status.equals("Salah I")){ ps2HP = Nama+", Anda Tidak Memiliki Hak Akses untuk Kunci "+ NoGKB+"!! Masukan Nomor Kunci Yang Benar. Anda Memiliki 1 Kesempatan Lagi"; FormHistory.simpan (Nama, "Salah II, Berusaha membuka Kunci "+NoGKB); kueri = "update tbuser set Status = 'Salah II' where NoBT= \""+BT +"\""; }else if (Status.equals("Salah II")){ ps2HP = Nama+", Karena Mencoba Mengakses Kunci "+NoGKB+" Yang Bukan Hak Anda, Maka Untuk Sementara Anda diblokir, Silahkan Hubungi Administrator"; FormHistory.simpan (Nama, "Blokir, Berusaha membuka Kunci "+NoGKB); kueri = "update tbuser set Status = 'Blokir' where NoBT= \""+BT +"\""; } } //verifikasi Waktu pengaksesan //-jika salah 3X Blokir else if (Waktu.substring(hari1, hari).equals("N")){ if (Status.equals("Aktif")){ ps2HP = Nama+", Maaf Anda Tidak Memiliki Hak Akses Pada Hari Ini. Anda Memiliki Hak Akses pada Hari:"+hariAkses; FormHistory.simpan (Nama, "Salah I, Mengakses Pada Hari yang Salah");
kueri = "update tbuser set Status = 'Salah I' where NoBT= \""+BT +"\""; }else if (Status.equals("Salah I")){ ps2HP = Nama+", Maaf Anda Tidak Memiliki Hak Akses Pada Hari Ini. Anda Memiliki Hak Akses pada Hari:"+hariAkses+" Anda Memiliki 1 Kesempatan Lagi"; FormHistory.simpan (Nama, "Salah II, Mengakses Pada Hari yang Salah"); kueri = "update tbuser set Status = 'Salah II' where NoBT= \""+BT +"\""; }else if (Status.equals("Salah II")){ ps2HP = Nama+", Karena Anda Mencoba Mengakses pada Hari dimana Anda Tidak Memiliki Hak Akses, Maka Untuk Sementara Anda diblokir, Silahkan Hubungi Administrator"; FormHistory.simpan (Nama, "Blokir, Mengakses Pada Hari yang Salah"); kueri = "update tbuser set Status = 'Blokir' where NoBT= \""+BT +"\""; } } // verifikasi NoKS. kalau berbeda sampai 3x diblokir else if (!(NoKS.equals(Seluler))) { if (Status.equals("Aktif")){ ps2HP = Nama+", Kartu seluler yang Anda gunakan Berbeda dengan yang didaftarkan!, Cobalah Lagi"; FormHistory.simpan (Nama, "Kesalahan I, Kartu Seluler Berbeda"); kueri = "update tbuser set Status = 'Salah I' where NoBT= \""+BT +"\""; }else if (Status.equals("Salah I")){ ps2HP = Nama+", Kartu Seluler yang Anda Gunakan Berbeda dengan yang didaftarkan!!, Anda Memiliki 1 Kesempatan Lagi"; FormHistory.simpan (Nama, "Kesalahan II, Kartu Seluler Berbeda"); kueri = "update tbuser set Status = 'Salah II' where NoBT= \""+BT +"\""; }else if (Status.equals("Salah II")){ ps2HP = Nama+", Kartu Seluler yang Anda Gunakan Masih Salah !!!, Untuk Sementara Anda diblokir, Silahkan Hubungi Administrator";
FormHistory.simpan (Nama, "Blokir, Kartu Seluler Berbeda"); kueri = "update tbuser set Status = 'Blokir' where NoBT= \""+BT +"\""; } } // verifikasi apakah diblokir if (Status.equals("Blokir")){ ps2HP = Nama+", Untuk Sementara Hak Akses Anda Diblokir!, Silahkan Hubungi Administrator. "; FormHistory.simpan (Nama, "Sedang diBlokir Mencoba Akses"); } conn.createStatement().executeUpdat e(kueri); conn.close(); } catch (SQLException ex){ if(ex.getSQLState() == "S1000"){ ps2HP= "Maaf Anda belum terdaftar. "+ "Jika Anda yakin telah mendaftar, "+ "pastikan ponsel dan kata sandi yang Anda gunakan "+ "sesuai dengan yang Anda daftarkan"; FormHistory.simpan("Anonimus", "Mencoba Login"); } } return ps2HP; } public static int getGKB(String NoGKB){ int Puluhan=0,Satuan=0; if (NoGKB.substring(1,2).equals("0")) Satuan =0; else if (NoGKB.substring(1,2).equals("1")) Satuan =1; else if (NoGKB.substring(1,2).equals("2")) Satuan =2; else if (NoGKB.substring(1,2).equals("3")) Satuan =3; else if (NoGKB.substring(1,2).equals("4")) Satuan =4; else if (NoGKB.substring(1,2).equals("5")) Satuan =5; else if (NoGKB.substring(1,2).equals("6")) Satuan =6;
115
else if (NoGKB.substring(1,2).equals("7")) Satuan =7; else if (NoGKB.substring(1,2).equals("8")) Satuan =8; else if (NoGKB.substring(1,2).equals("9")) Satuan =9; if (NoGKB.substring(0,1).equals("0")) Puluhan =0; else if (NoGKB.substring(0,1).equals("1")) Puluhan =10; else if (NoGKB.substring(0,1).equals("2")) Puluhan =20; else if (NoGKB.substring(0,1).equals("3")) Puluhan =30; else if (NoGKB.substring(0,1).equals("4")) Puluhan =40; else if (NoGKB.substring(0,1).equals("5")) Puluhan =50; else if (NoGKB.substring(0,1).equals("6")) Puluhan =60; else if (NoGKB.substring(0,1).equals("7")) Puluhan =70; else if (NoGKB.substring(0,1).equals("8")) Puluhan =80; else if (NoGKB.substring(0,1).equals("9")) Puluhan =90; return Puluhan+Satuan; } public void clearPanel(){ panelRegister.setVisible(false); panelHistory.setVisible(false); panelEdit.setVisible(false); panelAbout.setVisible(false); FormAbout.soundAbout.stop(); } private void isipanelKunci(){ GKBTutup = new ImageIcon (getClass().getResource("/GKBTutup. gif")); GKBBuka = new ImageIcon (getClass().getResource("/GKBBuka. gif")); btKunci[0] =new JButton(GKBTutup); btKunci[0].setBorder(new TitledBorder("Kunci 1")); btKunci[0].addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.Actio nEvent evt) {
buka_tutup(btKunci[0], "Administrator","01"); } }); btKunci[1] =new JButton(GKBTutup); btKunci[1].setBorder(new TitledBorder("Kunci 2")); btKunci[1].addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.Actio nEvent evt) { buka_tutup(btKunci[1], "Administrator","02"); } }); btKunci[2] =new JButton(GKBTutup); btKunci[2].setBorder(new TitledBorder("Kunci 3")); btKunci[2].addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.Actio nEvent evt) { buka_tutup(btKunci[2], "Administrator","03"); } }); panelKunci.add(btKunci[0]);panelKu nci.add(btKunci[1]);panelKunci.add( btKunci[2]); } public static void buka_tutup(JButton Kunci, String Pelaku, String NoGKB){ if (Kunci.getIcon()==GKBTutup) { lpt1.write(lpt1.read() |(int) Math.pow(2,(getGKB(NoGKB)-1))); Kunci.setIcon(GKBBuka); soundBuka.play(); FormHistory.simpan(Pelaku, "Membuka Kunci :" + NoGKB); } else if (Kunci.getIcon()==GKBBuka) { lpt1.write(lpt1.read() ^(int) Math.pow(2,(getGKB(NoGKB)-1))); Kunci.setIcon(GKBTutup); soundTutup.play(); FormHistory.simpan(Pelaku, "Menutup Kunci :" + NoGKB); } } // <editor-fold defaultstate="collapsed" desc=" Generated Code "> private void initComponents() { panelMenu = new javax.swing.JPanel(); btHistory = new javax.swing.JButton();
btRegister = new javax.swing.JButton(); btEdit = new javax.swing.JButton(); btAbout = new javax.swing.JButton(); btHelp = new javax.swing.JButton(); panelKunci = new javax.swing.JPanel(); scPnlIsi = new javax.swing.JScrollPane(); panelIsi = new javax.swing.JPanel(); setDefaultCloseOperation(javax.swin g.WindowConstants.EXIT_ON_CLO SE); setTitle("Kontrol Kunci Bluetooth"); setCursor(new java.awt.Cursor(java.awt.Cursor.DEF AULT_CURSOR)); setName("frameUtama"); panelMenu.setLayout(new java.awt.GridLayout(1, 0)); btHistory.setIcon(new javax.swing.ImageIcon(getClass().get Resource("/History.gif"))); btHistory.setBorder(new javax.swing.border.TitledBorder("His tory")); btHistory.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.Actio nEvent evt) { btHistoryActionPerformed(evt); } }); panelMenu.add(btHistory); btRegister.setIcon(new javax.swing.ImageIcon(getClass().get Resource("/Register.gif"))); btRegister.setBorder(new javax.swing.border.TitledBorder("Re gister")); btRegister.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.Actio nEvent evt) { btRegisterActionPerformed(evt); } }); panelMenu.add(btRegister); btEdit.setIcon(new javax.swing.ImageIcon(getClass().get Resource("/user.gif")));
116
btEdit.setBorder(new javax.swing.border.TitledBorder("Edi t User")); btEdit.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.Actio nEvent evt) { btEditActionPerformed(evt); } }); panelMenu.add(btEdit); btAbout.setIcon(new javax.swing.ImageIcon(getClass().get Resource("abouts.gif"))); btAbout.setBorder(new javax.swing.border.TitledBorder("Ab outs...")); btAbout.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.Actio nEvent evt) { btAboutActionPerformed(evt); } }); panelMenu.add(btAbout); btHelp.setIcon(new javax.swing.ImageIcon(getClass().get Resource("/Help.gif"))); btHelp.setBorder(new javax.swing.border.TitledBorder("Hel p")); btHelp.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.Actio nEvent evt) { btHelpActionPerformed(evt); } }); panelMenu.add(btHelp); getContentPane().add(panelMenu, java.awt.BorderLayout.NORTH); panelKunci.setLayout(new java.awt.GridLayout(1, 0)); panelKunci.setRequestFocusEnabled( false); getContentPane().add(panelKunci, java.awt.BorderLayout.SOUTH); scPnlIsi.setViewportView(panelIsi);
getContentPane().add(scPnlIsi, java.awt.BorderLayout.CENTER); } // private void btAboutActionPerformed(java.awt.ev ent.ActionEvent evt) { // TODO add your handling code here: clearPanel(); panelAbout.setVisible(true); FormAbout.soundAbout.loop(); } private void btHelpActionPerformed(java.awt.eve nt.ActionEvent evt) { // TODO add your handling code here: Runtime R = Runtime.getRuntime(); //fileHelp. try {R.exec( "hh "+ System.getProperty("user.dir") + "/Help.chm");} catch (IOException e){} } private void btEditActionPerformed(java.awt.even t.ActionEvent evt) { // TODO add your handling code here: clearPanel(); panelEdit.setVisible(true); } private void btHistoryActionPerformed(java.awt.e vent.ActionEvent evt) { // TODO add your handling code here: clearPanel(); panelHistory.setVisible(true); } private void btRegisterActionPerformed(java.awt. event.ActionEvent evt) { // TODO add your handling code here: clearPanel(); panelRegister.setVisible(true); } // Variables declaration - do not modify private javax.swing.JButton btAbout; private javax.swing.JButton btEdit; private javax.swing.JButton btHelp; private javax.swing.JButton btHistory;
private javax.swing.JButton btRegister; private javax.swing.JPanel panelIsi; private javax.swing.JPanel panelKunci; private javax.swing.JPanel panelMenu; private javax.swing.JScrollPane scPnlIsi; // End of variables declaration FormRegister panelRegister = new FormRegister(); FormHistory panelHistory = new FormHistory(); FormEdit panelEdit = new FormEdit(); FormAbout panelAbout = new FormAbout(); //identifikasi array Button Kunci JButton btKunci[]=new JButton[3]; //identifikasi variabel untuk gambar kunci public static ImageIcon GKBBuka,GKBTutup; //identifikasi variabel suara kunci buka dan tutup public static String urlBuka = "file:" + System.getProperty("user.dir") + "/buka.wav"; public static String urlTutup = "file:" + System.getProperty("user.dir") + "/tutup.wav"; public static AudioClip soundBuka, soundTutup; //identifikasi pararel port dan byte yang akan dikirim private static ParallelPort lpt1 = new ParallelPort(0x378); // 0x378 is normally the base address for the LPT1 port //yang di bawah ini dari benhui............ LocalDevice device; DiscoveryAgent agent; public final static UUID uuid = new UUID("F1123F1123F1123F1123F11 23F1123F1", false); private final static int SERVICE_TELEPHONY = 0x400000; public boolean done = false; public StreamConnectionNotifier server; /////////////////////////////////////////// }
117
B.2. FormAbout.java /* * FormAbout.java * Created on Maret 25, 2008, 7:31 PM * Dibuat oleh: * Nama: Audi Nantan * NIM : 01403-039 * Program Studi Teknik Elektro * Fakultas Teknologi Industri * Universitas Mercu Buana * sebagai program tugas akhir dengan judul Tugas Akhir: * SIMULASI KUNCI ELEKTRIK DENGAN ENKRIPSI MELALUI BLUETOOTH PADA PONSEL */
} public void ambilMusicAbout()throws java.net.MalformedURLException { soundAbout = Applet.newAudioClip(new URL(urlMusicAbout)); soundAbout.loop(); } // <editor-fold defaultstate="collapsed" desc=" Generated Code "> private void initComponents() {
import java.applet.*; import java.net.MalformedURLException; import java.net.URL;
setBorder(new javax.swing.border.MatteBorder(new javax.swing.ImageIcon(getClass().get Resource("/about.gif")))); setPreferredSize(new java.awt.Dimension(600, 350)); addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.Mouse Event evt) { formMouseClicked(evt); }
public class FormAbout extends javax.swing.JPanel { public FormAbout() { initComponents(); try {ambilMusicAbout();} catch (MalformedURLException e){}
setLayout(new java.awt.BorderLayout());
}); } // private void formMouseClicked(java.awt.event.M ouseEvent evt) { // TODO add your handling code here: soundAbout.stop(); } // Variables declaration - do not modify // End of variables declaration public static String urlMusicAbout = "file:" + System.getProperty("user.dir") + "/loss_of_me1.mid"; public static AudioClip soundAbout; }
B.3. FormEdit.java /* * FormEdit.java * Created on Maret 25, 2008, 7:29 PM * Dibuat oleh: * Nama: Audi Nantan * NIM : 01403-039 * Program Studi Teknik Elektro * Fakultas Teknologi Industri * Universitas Mercu Buana * sebagai program tugas akhir dengan judul Tugas Akhir: * SIMULASI KUNCI ELEKTRIK DENGAN ENKRIPSI MELALUI BLUETOOTH PADA PONSEL */ import javax.swing.*; import java.awt.GridBagConstraints; import java.sql.*; public class FormEdit extends javax.swing.JPanel { public FormEdit() { initComponents(); groupStatus(); invisibleForm(); }
// <editor-fold defaultstate="collapsed" desc=" Generated Code "> private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; bgStatus = new javax.swing.ButtonGroup(); panelKunci = new javax.swing.JPanel(); cbKunci1 = new javax.swing.JCheckBox(); cbKunci2 = new javax.swing.JCheckBox(); cbKunci3 = new javax.swing.JCheckBox(); jLabel1 = new javax.swing.JLabel(); panelWaktu = new javax.swing.JPanel(); lbWaktu = new javax.swing.JLabel(); cbSenin = new javax.swing.JCheckBox(); cbJumat = new javax.swing.JCheckBox(); cbSelasa = new javax.swing.JCheckBox(); cbSabtu = new javax.swing.JCheckBox();
cbRabu = new javax.swing.JCheckBox(); cbMinggu = new javax.swing.JCheckBox(); cbKamis = new javax.swing.JCheckBox(); tfNama = new javax.swing.JTextField(); tfBTID = new javax.swing.JTextField(); tfSeluler = new javax.swing.JTextField(); tfPass = new javax.swing.JPasswordField(); tfPass2 = new javax.swing.JPasswordField(); lbNama = new javax.swing.JLabel(); lbBTID = new javax.swing.JLabel(); lbSeluler = new javax.swing.JLabel(); lbPass = new javax.swing.JLabel(); lbPass2 = new javax.swing.JLabel(); btUbah = new javax.swing.JButton(); btBatal = new javax.swing.JButton();
lbcari = new javax.swing.JLabel(); tfCari = new javax.swing.JTextField(); btCari = new javax.swing.JButton(); panelStatus = new javax.swing.JPanel(); rbAktif = new javax.swing.JRadioButton(); rbBlokir = new javax.swing.JRadioButton(); rbSalah1 = new javax.swing.JRadioButton(); rbSalah2 = new javax.swing.JRadioButton(); jLabel2 = new javax.swing.JLabel(); setLayout(new java.awt.GridBagLayout()); setPreferredSize(new java.awt.Dimension(600, 350)); panelKunci.setLayout(new java.awt.GridBagLayout()); cbKunci1.setText("Kunci 1 (LED Merah)"); cbKunci1.setAutoscrolls(true); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelKunci.add(cbKunci1, gridBagConstraints); cbKunci2.setText("Kunci 2 (LED Kuning)"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelKunci.add(cbKunci2, gridBagConstraints); cbKunci3.setText("Kunci 3 (LED Hijau)"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelKunci.add(cbKunci3, gridBagConstraints); jLabel1.setText("Kunci yang bisa diakses User"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
panelKunci.add(jLabel1, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 6; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH WEST; gridBagConstraints.insets = new java.awt.Insets(11, 57, 0, 0); add(panelKunci, gridBagConstraints); panelWaktu.setLayout(new java.awt.GridBagLayout()); lbWaktu.setText("Waktu Pengaksesan"); panelWaktu.add(lbWaktu, new java.awt.GridBagConstraints()); cbSenin.setText("Senin"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelWaktu.add(cbSenin, gridBagConstraints); cbJumat.setText("Jumat"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelWaktu.add(cbJumat, gridBagConstraints); cbSelasa.setText("Selasa"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelWaktu.add(cbSelasa, gridBagConstraints); cbSabtu.setText("Sabtu"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelWaktu.add(cbSabtu, gridBagConstraints); cbRabu.setText("Rabu"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelWaktu.add(cbRabu, gridBagConstraints); cbMinggu.setText("Minggu"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelWaktu.add(cbMinggu, gridBagConstraints); cbKamis.setText("Kamis"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelWaktu.add(cbKamis, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 6; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH WEST; gridBagConstraints.insets = new java.awt.Insets(10, 0, 0, 0); add(panelWaktu, gridBagConstraints); tfNama.setEditable(false); tfNama.setMinimumSize(new java.awt.Dimension(200, 20)); tfNama.setPreferredSize(new java.awt.Dimension(200, 20)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; add(tfNama, gridBagConstraints); tfBTID.setMinimumSize(new java.awt.Dimension(200, 20)); tfBTID.setPreferredSize(new java.awt.Dimension(200, 20)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; add(tfBTID, gridBagConstraints); tfSeluler.setMinimumSize(new java.awt.Dimension(200, 20)); tfSeluler.setPreferredSize(new java.awt.Dimension(200, 20));
gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; add(tfSeluler, gridBagConstraints); tfPass.setMinimumSize(new java.awt.Dimension(200, 20)); tfPass.setPreferredSize(new java.awt.Dimension(200, 20)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 4; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; add(tfPass, gridBagConstraints); tfPass2.setMinimumSize(new java.awt.Dimension(200, 20)); tfPass2.setPreferredSize(new java.awt.Dimension(200, 20)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 5; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; add(tfPass2, gridBagConstraints); lbNama.setText("Nama"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZ ONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 0, 3, 3); add(lbNama, gridBagConstraints); lbBTID.setText("Alamat Bluetooth"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 0, 3, 3); add(lbBTID, gridBagConstraints); lbSeluler.setText("No. Kartu Seluler"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 0, 3, 3); add(lbSeluler, gridBagConstraints); lbPass.setText("Password"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZ ONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 0, 3, 3); add(lbPass, gridBagConstraints); lbPass2.setText("Ulangi Password"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 0, 3, 3); add(lbPass2, gridBagConstraints); btUbah.setText("Ubah"); btUbah.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.Actio nEvent evt) { btUbahActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 7; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 5); add(btUbah, gridBagConstraints); btBatal.setText("BATAL"); btBatal.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.Actio nEvent evt) { btBatalActionPerformed(evt);
} }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 7; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 5); add(btBatal, gridBagConstraints); lbcari.setText("Nama : "); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; gridBagConstraints.insets = new java.awt.Insets(27, 5, 27, 5); add(lbcari, gridBagConstraints); tfCari.setPreferredSize(new java.awt.Dimension(75, 20)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZ ONTAL; add(tfCari, gridBagConstraints); btCari.setText("Cari"); btCari.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.Actio nEvent evt) { btCariActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0); add(btCari, gridBagConstraints); panelStatus.setLayout(new java.awt.GridBagLayout()); rbAktif.setText("Aktif"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH WEST; panelStatus.add(rbAktif, gridBagConstraints); rbBlokir.setText("Blokir"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH WEST; panelStatus.add(rbBlokir, gridBagConstraints); rbSalah1.setText("Salah I"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH WEST; panelStatus.add(rbSalah1, gridBagConstraints); rbSalah2.setText("Salah II"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH WEST; panelStatus.add(rbSalah2, gridBagConstraints); jLabel2.setText("Status :"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 11); panelStatus.add(jLabel2, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 1; gridBagConstraints.gridheight = 5; add(panelStatus, gridBagConstraints); } //
mysql://localhost/kontrolkuncibluetoo th?user=&password="); String kueri = "select * from tbuser where Nama = '" + tfCari.getText() + "'" ; ResultSet rs = conn.createStatement().executeQuery (kueri); rs.first(); temuNama = rs.getString("Nama"); temuBT = rs.getString("NoBT"); temuSeluler = rs.getString("NoSeluler"); temuPassword = rs.getString("Password"); temuWaktu = rs.getString("Waktu"); temuKunci = rs.getString("Kunci"); temuStatus = rs.getString("Status"); conn.close(); showTemu(); visibleForm(); } catch (SQLException ex){ if(ex.getSQLState() == "S1000"){ JOptionPane.showMessageDialog(nul l, tfCari.getText() + " Belum Terdaftar"); return; } System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); } //
private void btBatalActionPerformed(java.awt.eve nt.ActionEvent evt) { // TODO add your handling code here: clearForm(); showTemu(); } private void btCariActionPerformed(java.awt.even t.ActionEvent evt) { clearForm(); try { Connection conn = DriverManager.getConnection("jdbc:
visibleForm(); }
private void btUbahActionPerformed(java.awt.eve nt.ActionEvent evt) { cekForm(); if (dataError){return;} if (tfPass.getText().equals(tfPass2.getTe xt())){ ubahUser(); clearForm(); invisibleForm(); } else { JOptionPane.showMessageDialog(nul
l,"Password yang dimasukan tidak sama.", "Konfirmasi Password",1); } } private void groupStatus(){ bgStatus.add(rbAktif); bgStatus.add(rbSalah1); bgStatus.add(rbSalah2); bgStatus.add(rbBlokir); } private void invisibleForm(){ tfNama.setVisible(false); tfBTID.setVisible(false); tfSeluler.setVisible(false); tfPass.setVisible(false); tfPass2.setVisible(false); panelKunci.setVisible(false); panelWaktu.setVisible(false); panelStatus.setVisible(false); btUbah.setVisible(false); btBatal.setVisible(false); lbNama.setVisible(false); lbBTID.setVisible(false); lbSeluler.setVisible(false); lbPass.setVisible(false); lbPass2.setVisible(false); } private void visibleForm(){ tfNama.setVisible(true); tfBTID.setVisible(true); tfSeluler.setVisible(true); tfPass.setVisible(true); tfPass2.setVisible(true); panelKunci.setVisible(true); panelWaktu.setVisible(true); panelStatus.setVisible(true); btUbah.setVisible(true); btBatal.setVisible(true); lbNama.setVisible(true); lbBTID.setVisible(true); lbSeluler.setVisible(true); lbPass.setVisible(true); lbPass2.setVisible(true); } private void clearForm(){ tfNama.setText(""); tfBTID.setText(""); tfSeluler.setText(""); tfPass.setText(""); tfPass2.setText(""); cbKunci1.setSelected(false); cbKunci2.setSelected(false); cbKunci3.setSelected(false); cbSenin.setSelected(false); cbSelasa.setSelected(false); cbRabu.setSelected(false); cbKamis.setSelected(false); cbJumat.setSelected(false); cbSabtu.setSelected(false); cbMinggu.setSelected(false); rbAktif.setSelected(false); rbSalah1.setSelected(false);
rbSalah2.setSelected(false); rbBlokir.setSelected(false); } private void cekForm(){ String psError=""; if (tfNama.getText().equals("")){psErro r=psError+ "Nama belum diisi \n";} if (tfNama.getText().length() > 20){psError=psError+ "Panjang Nama Maksimum 20 Karakter \n";} if (tfBTID.getText().equals("")){psError =psError+ "Alamat Bluetooth belum diisi \n";} if (tfBTID.getText().length() != 12){psError=psError+ "Alamat Bluetooth harus 12 Karakter \n";} if (tfSeluler.getText().equals("")){psErr or=psError+ "Nomor Kartu Seluler belum diisi \n";} if (tfSeluler.getText().length() > 15){psError=psError+ "Nomor Kartu Seluler tidak valid \n";} if (tfPass.getText().equals("")){psError =psError+ "Password belum diisi \n";} if (psError.equals("")){ dataError=false; } else{ JOptionPane.showMessageDialog(nul l,psError,"Periksa Kembali data yang Anda Masukan",0); dataError=true; } } private void ubahUser(){ //membuat md5 dari password yang akan disimpan dalam tabel user if (!(tfPass.getText().equals("XXXX"))) { PassMD5 = new String (digest.calculate(tfPass.getText())); } else if (tfPass.getText().equals("XXXX")){ PassMD5 = temuPassword; } //membuat RC4 dari Bluetooth ID dan No Kartu Seluler String RC4_BTid = doRC4.enkrip(PassMD5, tfBTID.getText().toUpperCase()); String RC4_KS = doRC4.enkrip(PassMD5 , tfSeluler.getText()); /*menyediakan parameter data kunci dan waktu yang akan disimpan dalam
*tabel user. Y menandakan Yes. N menandakan No. *misalkan untuk dtkunci = YNN *artinya untuk user yang bersangkutan kunci1=yes, kunci2=no, kunci3=no *misalkan untuk dtwaktu =YNNYYNY *artinya senin=y, selasa=n, rabu=n, dst... */ String dtKunci = ""; String dtWaktu = ""; String dtStatus =""; if (cbKunci1.isSelected()){dtKunci=dtK unci+"Y";} else {dtKunci=dtKunci+"N";} if (cbKunci2.isSelected()){dtKunci=dtK unci+"Y";} else {dtKunci=dtKunci+"N";} if (cbKunci3.isSelected()){dtKunci=dtK unci+"Y";} else {dtKunci=dtKunci+"N";} if (cbSenin.isSelected()){dtWaktu=dtW aktu+"Y";} else {dtWaktu=dtWaktu+"N";} if (cbSelasa.isSelected()){dtWaktu=dtW aktu+"Y";} else {dtWaktu=dtWaktu+"N";} if (cbRabu.isSelected()){dtWaktu=dtWa ktu+"Y";} else {dtWaktu=dtWaktu+"N";} if (cbKamis.isSelected()){dtWaktu=dt Waktu+"Y";} else {dtWaktu=dtWaktu+"N";} if (cbJumat.isSelected()){dtWaktu=dtW aktu+"Y";} else {dtWaktu=dtWaktu+"N";} if (cbSabtu.isSelected()){dtWaktu=dtW aktu+"Y";} else {dtWaktu=dtWaktu+"N";} if (cbMinggu.isSelected()){dtWaktu=dt Waktu+"Y";} else {dtWaktu=dtWaktu+"N";} if (rbAktif.isSelected()){dtStatus = "Aktif";} else if (rbSalah1.isSelected()){dtStatus = "Salah I";} else if (rbSalah2.isSelected()){dtStatus = "Salah II";} else if (rbBlokir.isSelected()){dtStatus = "Blokir";}
// menyimpan data kedalam database try { Connection conn = DriverManager.getConnec tion("jdbc:mysql://localhost/kontrolk uncibluetooth?user=&password="); String kueri = "update tbuser set "; kueri = kueri + "NoBT = '" + RC4_BTid + "', "; kueri = kueri + "NoSeluler = '" + RC4_KS + "', "; kueri = kueri + "Password = '" + PassMD5 + "', "; kueri = kueri + "Kunci = '" + dtKunci + "', "; kueri = kueri + "Waktu = '" + dtWaktu + "', "; kueri = kueri + "Status = '" + dtStatus + "' "; kueri = kueri + "where Nama = '"+ tfNama.getText() + "'"; conn.createStatement().executeUpdat e(kueri); conn.close(); } catch (SQLException ex) { String psError = new String ("SQLException: " + ex.getMessage() + "\n SQLState: " + ex.getSQLState()); JOptionPane.showMessageDialog(nul l,psError,"Kode Error: " + ex.getErrorCode(),1); return; } JOptionPane.showMessageDialog(nul l,"Data " + tfNama.getText() + " Telah Diedit"); //membuat log dari proses pendaftaran FormHistory.simpan(tfNama.getText( ),"Mengubah Data"); } private void showTemu(){ tfNama.setText(temuNama); tfBTID.setText(doRC4.dekrip(temuP assword,temuBT)); tfSeluler.setText(doRC4.dekrip(temu Password,temuSeluler)); tfPass.setText("XXXX"); tfPass2.setText("XXXX"); if (temuKunci.substring(0, 1).equals("Y")){cbKunci1.setSelected (true);}
if (temuKunci.substring(1, 2).equals("Y")){cbKunci2.setSelected (true);} if (temuKunci.substring(2, 3).equals("Y")){cbKunci3.setSelected (true);} if (temuWaktu.substring(0, 1).equals("Y")){cbSenin.setSelected(t rue);} if (temuWaktu.substring(1, 2).equals("Y")){cbSelasa.setSelected( true);} if (temuWaktu.substring(2, 3).equals("Y")){cbRabu.setSelected(t rue);} if (temuWaktu.substring(3, 4).equals("Y")){cbKamis.setSelected( true);} if (temuWaktu.substring(4, 5).equals("Y")){cbJumat.setSelected(t rue);} if (temuWaktu.substring(5, 6).equals("Y")){cbSabtu.setSelected(t rue);} if (temuWaktu.substring(6, 7).equals("Y")){cbMinggu.setSelecte d(true);} if (temuStatus.equals("Aktif")){rbAktif. setSelected(true);} else if (temuStatus.equals("Salah I")){rbSalah1.setSelected(true);} else if (temuStatus.equals("Salah II")){rbSalah2.setSelected(true);} else if (temuStatus.equals("Blokir")){rbBlok ir.setSelected(true);} }
// Variables declaration - do not modify private javax.swing.ButtonGroup bgStatus; private javax.swing.JButton btBatal; private javax.swing.JButton btCari; private javax.swing.JButton btUbah; private javax.swing.JCheckBox cbJumat; private javax.swing.JCheckBox cbKamis; private javax.swing.JCheckBox cbKunci1; private javax.swing.JCheckBox cbKunci2; private javax.swing.JCheckBox cbKunci3; private javax.swing.JCheckBox cbMinggu; private javax.swing.JCheckBox cbRabu; private javax.swing.JCheckBox cbSabtu; private javax.swing.JCheckBox cbSelasa; private javax.swing.JCheckBox cbSenin; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel lbBTID; private javax.swing.JLabel lbNama; private javax.swing.JLabel lbPass; private javax.swing.JLabel lbPass2; private javax.swing.JLabel lbSeluler;
private javax.swing.JLabel lbWaktu; private javax.swing.JLabel lbcari; private javax.swing.JPanel panelKunci; private javax.swing.JPanel panelStatus; private javax.swing.JPanel panelWaktu; private javax.swing.JRadioButton rbAktif; private javax.swing.JRadioButton rbBlokir; private javax.swing.JRadioButton rbSalah1; private javax.swing.JRadioButton rbSalah2; private javax.swing.JTextField tfBTID; private javax.swing.JTextField tfCari; private javax.swing.JTextField tfNama; private javax.swing.JPasswordField tfPass; private javax.swing.JPasswordField tfPass2; private javax.swing.JTextField tfSeluler; // End of variables declaration String temuNama, temuBT, temuSeluler, temuPassword, temuWaktu, temuKunci, temuStatus, PassMD5 ; boolean dataError; MD5Digest digest = new MD5Digest(); }
B.4. FormHistory.java /* * FormHistory.java * Created on Maret 25, 2008, 7:26 PM * Dibuat oleh: * Nama: Audi Nantan * NIM : 01403-039 * Program Studi Teknik Elektro * Fakultas Teknologi Industri * Universitas Mercu Buana * sebagai program tugas akhir dengan judul Tugas akhir: * SIMULASI KUNCI ELEKTRIK DENGAN ENKRIPSI MELALUI BLUETOOTH PADA PONSEL */ import javax.swing.*; import java.sql.*; import java.util.Calendar; public class FormHistory extends javax.swing.JPanel {
/** Creates new form FormHistory */ public FormHistory() { initComponents(); cekDriver.cekDriver(); historySemua(); tampilkan(); } // <editor-fold defaultstate="collapsed" desc=" Generated Code "> private void initComponents() { jTable1 = new javax.swing.JTable(); panelFilter = new javax.swing.JPanel(); lbNama = new javax.swing.JLabel(); tfFilter = new javax.swing.JTextField();
btFilter = new javax.swing.JButton(); paneltabel = new javax.swing.JPanel(); jTable1.setModel(new javax.swing.table.DefaultTableModel ( new Object [][] { {null, null, null, null}, {null, null, null, null}, {null, null, null, null}, {null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" } )); setLayout(new java.awt.BorderLayout());
setPreferredSize(new java.awt.Dimension(600, 350)); lbNama.setText("Nama :"); panelFilter.add(lbNama); tfFilter.setPreferredSize(new java.awt.Dimension(100, 20)); panelFilter.add(tfFilter); btFilter.setText("Filter"); btFilter.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.Actio nEvent evt) { btFilterActionPerformed(evt); } }); panelFilter.add(btFilter); add(panelFilter, java.awt.BorderLayout.NORTH); paneltabel.setLayout(new java.awt.GridLayout(1, 0)); add(paneltabel, java.awt.BorderLayout.CENTER); } // private void btFilterActionPerformed(java.awt.eve nt.ActionEvent evt) { // TODO add your handling code here: historyNama(); tampilkan(); } public static void simpan(String logUsr, String logHty) { //menseting waktu sekarang String wktSkrg = new String(); wktSkrg = wktSkrg.valueOf(Calendar.getInstanc e().getTime().getYear()-100); wktSkrg = wktSkrg + "-"; wktSkrg = wktSkrg + wktSkrg.valueOf(Calendar.getInstanc e().getTime().getMonth()+1); wktSkrg = wktSkrg+"-"; wktSkrg = wktSkrg + wktSkrg.valueOf(Calendar.getInstanc e().getTime().getDate()); wktSkrg = wktSkrg+" "; wktSkrg = wktSkrg + wktSkrg.valueOf(Calendar.getInstanc e().getTime().getHours()); wktSkrg = wktSkrg+":"; wktSkrg = wktSkrg + wktSkrg.valueOf(Calendar.getInstanc e().getTime().getMinutes()); wktSkrg = wktSkrg+":";
wktSkrg = wktSkrg + wktSkrg.valueOf(Calendar.getInstanc e().getTime().getSeconds()); try{ java.sql.Connection conn = DriverManager.getConnection("jdbc: mysql://localhost/kontrolkuncibluetoo th?user=&password="); String kueri = "insert into tbhistory values ('"+ wktSkrg +"','" + logUsr+"','"+logHty+"')"; conn.createStatement().executeUpdat e(kueri); conn.close(); }catch (SQLException ex) { String psError = new String ("SQLException: " + ex.getMessage() + "\n SQLState: " + ex.getSQLState()); JOptionPane.showMessageDialog(nul l,psError,"History Error: " + ex.getErrorCode(),1); } historySemua(); tampilkan(); } public static void historySemua(){ try { Connection conn = DriverManager.getConnection("jdbc: mysql://localhost/kontrolkuncibluetoo th?user=&password="); kueri = "select * from tbHistory"; hasilKueri = conn.createStatement().executeQuery (kueri); hasilKueri.last(); dtHistory = new String [hasilKueri.getRow()][3]; hasilKueri.afterLast(); int index =0; while(hasilKueri.previous()) { dtHistory[index][0] = hasilKueri.getString("Waktu"); dtHistory[index][1] = hasilKueri.getString("Nama"); dtHistory[index][2] = hasilKueri.getString("History"); index = index + 1; } conn.close(); } catch (SQLException ex){ System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode()); } } public static void tampilkan(){ tbHistory = new JTable(dtHistory, kolom); scTbHistory = new JScrollPane(tbHistory); paneltabel.removeAll(); paneltabel.add(scTbHistory); paneltabel.doLayout(); } public static void historyNama(){ try { Connection conn = DriverManager.getConnection("jdbc: mysql://localhost/kontrolkuncibluetoo th?user=&password="); kueri = "select * from tbHistory where Nama = '" + tfFilter.getText()+"'"; hasilKueri = conn.createStatement().executeQuery (kueri); hasilKueri.last(); if (hasilKueri.getRow()==0){ JOptionPane.showMessageDialog(nul l, tfFilter.getText() + " Belum Terdaftar"); historySemua(); }else { dtHistory = new String [hasilKueri.getRow()][3]; hasilKueri.afterLast(); int index =0; while(hasilKueri.previous()) { dtHistory[index][0] = hasilKueri.getString("Waktu"); dtHistory[index][1] = hasilKueri.getString("Nama"); dtHistory[index][2] = hasilKueri.getString("History"); index = index + 1; } } conn.close(); } catch (Exception ex){} } // Variables declaration - do not modify private javax.swing.JButton btFilter; private javax.swing.JTable jTable1; private javax.swing.JLabel lbNama; private javax.swing.JPanel panelFilter; private static javax.swing.JPanel paneltabel;
private static javax.swing.JTextField tfFilter; // End of variables declaration private static String[] kolom = {"Waktu", "Nama", "Catatan"};
private static String[][] dtHistory = {{null, null,null}}; private static JScrollPane scTbHistory; private static JTable tbHistory;
private static String kueri; private static ResultSet hasilKueri ; }
B.5. FormRegister.java /* * FormRegister.java * Created on Mar 25, 2008, 6:59 PM * Dibuat oleh: * Nama: Audi Nantan * NIM : 01403-039 * Program Studi Teknik Elektro * Fakultas Teknologi Industri * Universitas Mercu Buana * sebagai program tugas akhir dengan judul Tugas Akhir: * SIMULASI KUNCI ELEKTRIK DENGAN ENKRIPSI MELALUI BLUETOOTH PADA PONSEL */ import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.sql.*; public class FormRegister extends JPanel { public FormRegister() { initComponents(); } // <editor-fold defaultstate="collapsed" desc=" Generated Code "> private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; lbNama = new javax.swing.JLabel(); lbBTID = new javax.swing.JLabel(); lbSeluler = new javax.swing.JLabel(); lbPass = new javax.swing.JLabel(); lbPass2 = new javax.swing.JLabel(); btDaftar = new javax.swing.JButton(); btBatal = new javax.swing.JButton(); panelKunci = new javax.swing.JPanel(); cbKunci1 = new javax.swing.JCheckBox(); cbKunci2 = new javax.swing.JCheckBox(); cbKunci3 = new javax.swing.JCheckBox();
jLabel1 = new javax.swing.JLabel(); panelWaktu = new javax.swing.JPanel(); lbWaktu = new javax.swing.JLabel(); cbSenin = new javax.swing.JCheckBox(); cbJumat = new javax.swing.JCheckBox(); cbSelasa = new javax.swing.JCheckBox(); cbSabtu = new javax.swing.JCheckBox(); cbRabu = new javax.swing.JCheckBox(); cbMinggu = new javax.swing.JCheckBox(); cbKamis = new javax.swing.JCheckBox(); tfNama = new javax.swing.JTextField(); tfBTID = new javax.swing.JTextField(); tfSeluler = new javax.swing.JTextField(); tfPass = new javax.swing.JPasswordField(); tfPass2 = new javax.swing.JPasswordField(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); setLayout(new java.awt.GridBagLayout()); setMinimumSize(new java.awt.Dimension(0, 0)); setPreferredSize(new java.awt.Dimension(600, 350)); lbNama.setText("Nama"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
add(lbNama, gridBagConstraints); lbBTID.setText("Alamat Bluetooth"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); add(lbBTID, gridBagConstraints); lbSeluler.setText("No. Kartu Seluler"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); add(lbSeluler, gridBagConstraints); lbPass.setText("Password"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZ ONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); add(lbPass, gridBagConstraints); lbPass2.setText("Ulangi Password"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); add(lbPass2, gridBagConstraints); btDaftar.setText("Daftar");
btDaftar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.Actio nEvent evt) { btDaftarActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 7; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; gridBagConstraints.insets = new java.awt.Insets(0, 6, 18, 6); add(btDaftar, gridBagConstraints); btBatal.setText("BATAL"); btBatal.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.Actio nEvent evt) { btBatalActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 7; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 6, 18, 6); add(btBatal, gridBagConstraints); panelKunci.setLayout(new java.awt.GridBagLayout()); cbKunci1.setText("Kunci 1 (LED Merah)"); cbKunci1.setAutoscrolls(true); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelKunci.add(cbKunci1, gridBagConstraints); cbKunci2.setText("Kunci 2 (LED Kuning)"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelKunci.add(cbKunci2, gridBagConstraints);
cbKunci3.setText("Kunci 3 (LED Hijau)"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelKunci.add(cbKunci3, gridBagConstraints); jLabel1.setText("Kunci yang bisa diakses User"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelKunci.add(jLabel1, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 5; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH WEST; gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 0); add(panelKunci, gridBagConstraints); panelWaktu.setLayout(new java.awt.GridBagLayout()); lbWaktu.setText("Waktu Pengaksesan"); panelWaktu.add(lbWaktu, new java.awt.GridBagConstraints()); cbSenin.setText("Senin"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelWaktu.add(cbSenin, gridBagConstraints); cbJumat.setText("Jumat"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelWaktu.add(cbJumat, gridBagConstraints); cbSelasa.setText("Selasa"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
panelWaktu.add(cbSelasa, gridBagConstraints); cbSabtu.setText("Sabtu"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelWaktu.add(cbSabtu, gridBagConstraints); cbRabu.setText("Rabu"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelWaktu.add(cbRabu, gridBagConstraints); cbMinggu.setText("Minggu"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelWaktu.add(cbMinggu, gridBagConstraints); cbKamis.setText("Kamis"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panelWaktu.add(cbKamis, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 5; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH WEST; gridBagConstraints.insets = new java.awt.Insets(10, 0, 0, 0); add(panelWaktu, gridBagConstraints); tfNama.setMinimumSize(new java.awt.Dimension(200, 20)); tfNama.setPreferredSize(new java.awt.Dimension(200, 20)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 0; add(tfNama, gridBagConstraints); tfBTID.setMinimumSize(new java.awt.Dimension(200, 20));
tfBTID.setPreferredSize(new java.awt.Dimension(200, 20)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 1; add(tfBTID, gridBagConstraints); tfSeluler.setMinimumSize(new java.awt.Dimension(200, 20)); tfSeluler.setPreferredSize(new java.awt.Dimension(200, 20)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 2; add(tfSeluler, gridBagConstraints); tfPass.setMinimumSize(new java.awt.Dimension(200, 20)); tfPass.setPreferredSize(new java.awt.Dimension(200, 20)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 3; add(tfPass, gridBagConstraints); tfPass2.setMinimumSize(new java.awt.Dimension(200, 20)); tfPass2.setPreferredSize(new java.awt.Dimension(200, 20)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 4; add(tfPass2, gridBagConstraints); jLabel2.setText("Masukan Nama Max. 20 karakter"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 7, 0, 0); add(jLabel2, gridBagConstraints); jLabel3.setText("Tekan *#2820# pada Ponsel"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 7, 0, 0); add(jLabel3, gridBagConstraints); jLabel3.getAccessibleContext().setAc cessibleName("");
jLabel4.setText("Nomor Seluler (mis. 08561140302)"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 7, 0, 0); add(jLabel4, gridBagConstraints); jLabel5.setText("Masukan Password"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 7, 0, 0); add(jLabel5, gridBagConstraints); jLabel6.setText("Ulangi Password"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 4; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 7, 0, 0); add(jLabel6, gridBagConstraints); } //
} //untuk mengecek apakah data yang diisi sudah benar private void cekForm(){ String psError=""; if (tfNama.getText().equals("")){psErro r=psError+ "Nama belum diisi \n";} if (tfNama.getText().length() > 20){psError=psError+ "Panjang Nama Maksimum 20 Karakter \n";} if (tfBTID.getText().equals("")){psError =psError+ "Alamat Bluetooth belum diisi \n";} if (tfBTID.getText().length() != 12){psError=psError+ "Alamat Bluetooth harus 12 Karakter \n";} if (tfSeluler.getText().equals("")){psErr or=psError+ "Nomor Kartu Seluler belum diisi \n";} if (tfSeluler.getText().length() > 15){psError=psError+ "Nomor Kartu Seluler tidak valid \n";} if (tfPass.getText().equals("")){psError =psError+ "Password belum diisi \n";} if (psError.equals("")){ dataError=false; } else{ JOptionPane.showMessageDialog(nul l,psError,"Periksa Kembali data yang Anda Masukan",0); dataError=true; } }
private void btBatalActionPerformed(java.awt.eve nt.ActionEvent evt) { clearFormRegister(); }
private void tambahUser(){ //membuat md5 dari password yang akan disimpan dalam tabel user String PassMD5 = new String (digest.calculate(tfPass.getText()));
private void btDaftarActionPerformed(java.awt.ev ent.ActionEvent evt) { cekForm(); if (dataError){return;}
//membuat RC4 dari Bluetooth ID dan No Kartu Seluler String RC4_BTid = doRC4.enkrip(PassMD5, tfBTID.getText().toUpperCase()); String RC4_KS = doRC4.enkrip(PassMD5 , tfSeluler.getText());
if (tfPass.getText().equals(tfPass2.getTe xt())){ tambahUser(); clearFormRegister(); } else { JOptionPane.showMessageDialog(nul l,"Password yang dimasukan tidak sama.", "Konfirmasi Password",1); }
/*menyediakan parameter data kunci dan waktu yang akan disimpan dalam *tabel user. Y menandakan Yes. N menandakan No. *misalkan untuk dtkunci = YNN *artinya untuk user yang bersangkutan kunci1=yes, kunci2=no, kunci3=no *misalkan untuk dtwaktu =YNNYYNY
*artinya senin=y, selasa=n, rabu=n, dst... */ String dtKunci = ""; String dtWaktu = ""; if (cbKunci1.isSelected()){dtKunci=dtK unci+"Y";} else {dtKunci=dtKunci+"N";} if (cbKunci2.isSelected()){dtKunci=dtK unci+"Y";} else {dtKunci=dtKunci+"N";} if (cbKunci3.isSelected()){dtKunci=dtK unci+"Y";} else {dtKunci=dtKunci+"N";} if (cbSenin.isSelected()){dtWaktu=dtW aktu+"Y";} else {dtWaktu=dtWaktu+"N";} if (cbSelasa.isSelected()){dtWaktu=dtW aktu+"Y";} else {dtWaktu=dtWaktu+"N";} if (cbRabu.isSelected()){dtWaktu=dtWa ktu+"Y";} else {dtWaktu=dtWaktu+"N";} if (cbKamis.isSelected()){dtWaktu=dt Waktu+"Y";} else {dtWaktu=dtWaktu+"N";} if (cbJumat.isSelected()){dtWaktu=dtW aktu+"Y";} else {dtWaktu=dtWaktu+"N";} if (cbSabtu.isSelected()){dtWaktu=dtW aktu+"Y";} else {dtWaktu=dtWaktu+"N";} if (cbMinggu.isSelected()){dtWaktu=dt Waktu+"Y";} else {dtWaktu=dtWaktu+"N";} // menyimpan data kedalam database try { Connection conn = DriverManager.getConnec tion("jdbc:mysql://localhost/kontrolk uncibluetooth?user=&password="); String kueri = "insert into tbuser "; kueri = kueri + "values('" + RC4_BTid + "','";
kueri = kueri + tfNama.getText() + "','"; kueri = kueri + RC4_KS + "','"; kueri = kueri + PassMD5 + "','"; kueri = kueri + dtKunci + "','"; kueri = kueri + dtWaktu + "','Aktif')"; conn.createStatement().executeUpdat e(kueri); conn.close(); } catch (SQLException ex) { String psError = new String ("SQLException: " + ex.getMessage() + "\n SQLState: " + ex.getSQLState()); JOptionPane.showMessageDialog(nul l,psError,"Kode Error: " + ex.getErrorCode(),1); return; } JOptionPane.showMessageDialog(nul l,"User " + tfNama.getText() + " Telah Terdaftar"); //membuat log dari proses pendaftaran FormHistory.simpan(tfNama.getText( ),"Register"); } //untuk membersihkan form private void clearFormRegister(){ cbKunci1.setSelected(false); cbKunci2.setSelected(false); cbKunci3.setSelected(false); cbSenin.setSelected(false); cbSelasa.setSelected(false); cbRabu.setSelected(false); cbKamis.setSelected(false); cbJumat.setSelected(false); cbSabtu.setSelected(false); cbMinggu.setSelected(false); tfBTID.setText(""); tfNama.setText(""); tfSeluler.setText(""); tfPass.setText(""); tfPass2.setText(""); } // Variables declaration - do not modify
private javax.swing.JButton btBatal; private javax.swing.JButton btDaftar; private javax.swing.JCheckBox cbJumat; private javax.swing.JCheckBox cbKamis; private javax.swing.JCheckBox cbKunci1; private javax.swing.JCheckBox cbKunci2; private javax.swing.JCheckBox cbKunci3; private javax.swing.JCheckBox cbMinggu; private javax.swing.JCheckBox cbRabu; private javax.swing.JCheckBox cbSabtu; private javax.swing.JCheckBox cbSelasa; private javax.swing.JCheckBox cbSenin; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel lbBTID; private javax.swing.JLabel lbNama; private javax.swing.JLabel lbPass; private javax.swing.JLabel lbPass2; private javax.swing.JLabel lbSeluler; private javax.swing.JLabel lbWaktu; private javax.swing.JPanel panelKunci; private javax.swing.JPanel panelWaktu; private javax.swing.JTextField tfBTID; private javax.swing.JTextField tfNama; private javax.swing.JPasswordField tfPass; private javax.swing.JPasswordField tfPass2; private javax.swing.JTextField tfSeluler; // End of variables declaration boolean dataError; MD5Digest digest = new MD5Digest(); }
B.6. cekDriver.java /* * cekDriver.java * Dibuat oleh: * Nama: Audi Nantan * NIM : 01403-039 * Program Studi Teknik Elektro * Fakultas Teknologi Industri * Universitas Mercu Buana * sebagai program tugas akhir dengan judul Tugas Akhir: * SIMULASI KUNCI ELEKTRIK DENGAN ENKRIPSI MELALUI BLUETOOTH PADA PONSEL */ import java.sql.*; import javax.swing.JOptionPane; public class cekDriver { static void cekDriver() { try { Class.forName("com.mys ql.jdbc.Driver").newInstance(); } catch (Exception E){ JOptionPane.showMessageDialog(nul l,"Unable to load driver"); E.printStackTrace(); } } }
LAMPIRAN 14 MANUAL PENGGUNAAN PROGRAM A. Spesifikasi Minimum Ada baiknya sebelum melakukan instalasi aplikasi ini, melihat terlebih dahulu spesifikasi minimum yang dibutuhkan sebagai berikut: A.1 Aplikasi Anak Kunci Bluetooth Spesifikasi ponsel yang bisa menggunakan aplikasi Anak Kunci Bluetooth adalah sebagai berikut: 1. 2. 3. 4.
Sistem Operasi Symbian OS minimal versi 7.0. Mendukung Java MIDP 2.0. Mendukung JSR-82. Mendukung JSR-135.
Contoh Ponsel yang mendukung untuk aplikasi ini adalah Nokia 6600 dan Nokia 6260. A.2 Aplikasi Kontrol Kunci Bluetooth Spesifikasi perangkat keras komputer harus ditambah dengan Bluetooth USB Adapter (Dongel Bluetooth). Sedangkan spesifikasi minimum perangkat lunak yang bisa digunakan adalah: 1. Sistem Operasi Microsoft Windows XP SP2. 2. J2SDK 1.5.0. 3. MySQL 4.0.15. B. Cara Instalasi Pada paket instalasi yang disediakan terdapat 2 buah file yaitu: 1. Setup.exe, file ini merupakan file instalasi Kontrol Kunci Bluetooth yang diinstal pada komputer. dengan menjalankan file ini maka aplikasi Kontrol Kunci Bluetooth akan terinstal. Secara default jika direktori instalasi tidak di ubah maka akan diinstal pada c:\program files\KKB. Dan setelah itu harus dilakukan sedikit pengaturan agar aplikasi kontrol kunci bluetooth dapat berjalan dengan baik. pengaturan tersebut adalah: o copy file intelbth.dll, parport.dll yang terdapat pada folder aplikasi tersebut diinstal ke direktori BIN program java. misalkan program
o o o
java di instal pada direktori C:\Program Files\j2sdk_nb\j2sdk1.5.0, maka copy file tersebut ke direktory C:\Program Files\j2sdk_nb\j2sdk1.5.0\bin. copy file UserPort.sys yang terdapat folder aplikasi tersebut diinstal ke direktori C:\Windows\System32\Driver. Jalankan userport.exe dan kemudian tekan tombol start. copy folder kontrolkuncibluetooth yang terdapat pada folder instalasi kedalam direktory c:\mysql\data.
Setelah menekan melakukan instalasi akan ada shortcut "KKB" yang terdapat pada desktop. shortcut inilah yang digunakan untuk menjalankan aplikasi Kontrol Kunci Bluetooth. 2. BTKey.jar. file ini adalah aplikasi Anak Kunci Bluetooth yang harus diinstal pada ponsel, caranya cukup mengirimkan file tersebut keponsel dengan menggunakan bluetooth atau infrared. dan kemudian tinggal mengikuti petunjuk penginstallan. setelah proses intalasi selesai maka akan ada shortcut "BTKey" dalam menu ponsel. Shortcut ini lah yang digunakan untuk menjalankan aplikasi Anak Kunci Bluetooth. C. Manual Penggunaan Program Rancangan Kunci Elektronik Melalui Bluetooth pada Ponsel ini memiliki dua buah modul yang berupa perangkat lunak, yaitu : 1. Modul Anak Kunci Bluetooth (AKB)berupa aplikasi pada ponsel yang berfungsi sebagai remote kontrol untuk membuka kunci pintu. 2. Modul Kontrol Kunci Bluetooth (KKB)berupa aplikasi pada komputer yang berfungsi sebagai pusat kendali dari kunci elektronik rancangan ini. Sehingga Manual program juga terdiri dari dua manual program yaitu : 1. Manual Penggunaan Program Anak Kunci Bluetooth 2. Manual Penggunaan Program Kontrol Kunci Bluetooth C.1 Manual Penggunaan Aplikasi Anak Kunci Bluetooth. Aplikasi Anak Kunci Bleutooth merupakan aplikasi yang berfungsi sebagai remote untuk membuka/ menutup kunci yang diinstal pada ponsel pengguna. Setelah melakukan instalasi aplikasi Anak Kunci Bluetooth dan melakukan Registrasi pada aplikasi Kontrol Kunci Bluetooth barulah seorang pengguna dapat menggunakan seluruh menu yang terdapat pada aplikasi Anak Kunci Bluetooth pada ponsel miliknya. Tampilan awal dari Aplikasi Anak Kunci Bluetooth adalah sebagai berikut:
Pada Tampilan awal tersebut terdapat dua pilihan yaitu: 1. Close: Pilihan untuk keluar dari Aplikasi 2. Option: Pilihan untuk menampilkan menu-menu yang terdapat pada Aplikasi Anak Kunci Bluetooth. seperti pada tampilan berikut:
Menu-Menu yang terdapat pada aplikasi ini adalah: Menu Open/Close, menu untuk membuka dan menutup kunci Menu History, menu untuk melihat catatan penggunaan. Menu Help, menu untuk menampilkan pertolangan cara penggunaan Aplikasi Anak Kunci Bluetooth secara ringkas. Menu About, menu untuk menampikan prihal mengenai aplikasi Anak Kunci Bluetooth. C.2 Manual Penggunaan Aplikasi Kontrol Kunci Bluetooth.
Aplikasi Kontrol Kunci Bluetooth merupakan aplikasi yang berfungsi sebagai pusat kendali dari keseluruhan sistem "Kunci Elektrik dengan enkripsi melalui Bluetooth pada ponsel" ini. Setelah melakukan instalasi aplikasi Kontrol Kunci Bluetooth, barulah aplikasi ini dapat digunakan. Tampilan Utama dari Aplikasi Kontrol Kunci Bluetooth adalah sebagai berikut:
Tampilan utama dari Aplikasi Kontrol Kunci Bluetooth ini sebenarnya terdiri dari 3 bagain yaitu: 1. Panel menu yang terdapat pada bagian paling atas tampilan aplikasi. Panel ini memuat tombol-tombol pemilihan menu. semua menu pada aplikasi Kontrol Kunci Bluetooth terdapat pada panel ini. menu - menu tersebut adalah : o Menu History o Menu Register o Menu Edit User o Menu About o Menu Help Panel ini akan selalu ada pada setiap pemilihan menu.
2. Panel Isi yang terdapat pada bagian tengah tampilan aplikasi. tampilan panel ini akan selalu berubah-ubah sesuai dengan menu yang dipilih pada panel menu. 3. Panel Kunci yang terdapat pada bagian paling bawah tampilan aplikasi. Pada panel ini terdapat tombol-tombol shortcut yang menampilkan status kunci yang berfungsi untuk membuka atau menutup kunci dari aplikasi Kontrol Kunci Bluetooth ini. Panel ini akan selalu ada pada setiap pemilihan menu.
Pada saat aplikasi Kontrol Kunci Bluetooth dijalankan akan langsung menampilkan tampilan menu About pada panel isi. Pada tampilan utama ini juga melakukan berbagai proses yang tidak mengahsilkan perubahan pada tampilan seperti membukakan/ menutup kunci, melakukan verifikasi setiap perintah yang dikirimkan oleh Anak Kunci Bluetooth.
Menu History Menu ini berfungsi untuk menampilkan seluruh catatan dari pengakasesan yang terjadi dalam bentuk tabel, baik pengaksesan yang sukses ataupun pengaksesan yang gagal. tabel tersebut dapat difilter berdasarkan nama pengguna yang melakukan pengaksesan dengan cara memasukan nama pengguna dan kemudian memilih tombol Filter. maka tabel hanya akan menampilkan seluruh catatan pengaksesan yang pernah dilakukan oleh pengguna yang bersangkutan saja. Dalam menu ini juga terjadi proses pencatatan seluruh pengaksesan yang terjadi kedalam basis data. setiap kali terjadi perubahan pada basis data, maka secara langsung tabel pada menu ini juga akan diperbaharui. Menu Register Menu ini berfungsi untuk melakukan pendaftaran pengguna baru. Agar seorang pengguna dapat menggunakan aplikasi kontrol kunci bluetooth untuk membuka kunci yang terpasang pada Kontrol Kunci Bluetooth, maka pengguna tersebut harus telah terdaftar terlebih dahulu. menu ini berfungsi untuk melakukan proses pendaftaran tersebut. Menu Edit User Menu ini berfungsi untuk melakukan perubahan pada data-data pengguna yang telah terdaftar. Pengguna yang telah terdaftar memiliki kemungkinan untuk melakukan perubahan data yang mungkin disebabkan karena perubahan Nomor kartu seluler, mengganti ponsel dan lain sebagainya. Tampilan dari menu History ini hampir sama dengan tampilan menu registrasi, yang membedakannya pada menu Edit User menampilkan status dari pengguna.
Sebelum melakukan pengeditan terhadap data pengguna. terlebih dahulu harus dilakukan pencarian dengan memasukan nama pengguna dan kemudian menekan tombol cari. setelah melakukan proses pencarian barulah data-data pengguna yang bersangkutan ditampilkan dan dapat dilakukan proses pengeditan. jadi menu edit user ini juga berfungsi untuk sekedar melihat data penguna. Selain itu pada menu ini juga berfungsi untuk mengaktifkan pengguna yang statusnya diblokir. atau bisa juga untuk memblokir pengguna yang dianggap tidak berhak menggunakan aplikasi. Menu About Menu ini berfungsi untuk menampilkan prihal mengenai pembuatan aplikasi ini. Setelah menekan tombol menu Help maka akan menampikan Help seperti yang sedang dijalankan ini. Tampilan dari menu About ini adalah sebagai berikut: Menu Help Menu ini berfungsi untuk menampilkan penjelasan/ pertolongan mengenai Rancangan "Kunci Elektrik dengan Enkripsi melalui Bluetooth pada Ponsel".