Minggu, 21 Juni 2015

skripsi



BAB I
PENDAHULUAN

1.1.            Latar Belakang Masalah
Berbagai organisasi, perusahaan, atau pun pihak – pihak lain telah memanfaatkan teknologi basis data untuk menyimpan dan mengelola data organisasi atau perusahaannya. Saat ini, keamanan terhadap data yang tersimpan dalam basis data sudah menjadi persyaratan mutlak. Pengamanan terhadap jaringan komputer yang terhubung dengan basis data sudah tidak lagi menjamin keamanan data karena kebocoran data dapat disebabkan oleh “orang dalam” atau pihak – pihak yang langsung berhubungan dengan basis data seperti administrator basis data. Hal ini menyebabkan pengguna basis data harus menemukan cara untuk mengamankan data tanpa campur tangan administrator basis data.
Kriptografi dapat digunakan untuk mengamankan data. Oleh karena itu, pengguna basis data membutuhkan bantuan untuk memenuhi kebutuhan keamanan akan data yang disimpannya. Penerapan kriptografi pada Tugas Akhir ini akan difokuskan bagaimana kriptografi dapat mengamankan data sampai pada level baris (row) dan kolom (field) dengan tetap memperhatikan integritas data dan kewenangan setiap pengguna basis data. Algoritma kriptografi yang akan digunakan ialah algoritma kriptografi simetris dan bersifat stream cipher sehingga data hasil enkripsi (cipherteks) mempunyai ukuran yang sama dengan data asli (plainteks). Teknik kriptografi simetris dipilih karena diharapkan dengan algoritma ini proses enkripsi – dekripsi data dapat dilakukan dengan waktu yang lebih cepat dibandingkan dengan
algoritma kriptografi kunci publik (asimetris).
Berdasarkan atas informasi diatas, penulis membuat sebuah implementasi dengan menerapkan metode sistem enkripsi simetris dalam pengamanan login aplikasi program yang dibentuk kedalam Tugas Akhir untuk menyelesaikan studi pada program Sarjana Strata Satu (S1) “Implementasi Pengamanan Basis Data dengan Teknik Enkripsi”.

1.2.            Identifikasi Masalah
Berdasarkan latar belakang masalah diatas, identifikasi masalahnya adalah bagaimana merancang suatu perangkat lunak pengenkripsian basis data pada data login yang dapat membantu keamanan aplikasi program dan database.

1.3.            Tujuan Penulisan
Adapun tujuan dari penulisan ini adalah
1.      Untuk membuat sistem keamanan login aplikasi program dengan menggunakan enkripsi.
2.      Mempelajari teknik pengamanan enkripsi sebagai lanjutan dari mata kuliah kriptografi sekuriti.

1.4.            Batasan Masalah
Adapun batasan masalah dalam penulisan tugas akhir ini :
1.      Perancangan program enkripsi pada login aplikasi program ini menggunakan software visual basic 6.0 dengan memanfaatkan menu *.dll.
2.      Perancangan data login yang diterima adalah tidak ditentukan dan berbentuk karakter tidak numerik.

1.5.            Metode Penelitian
Metode yang digunakan dalam pengumpulan data adalah :
a.      Wawancara
Metode ini dilakukan dengan mewancarai pakar yang mengerti tentang keamanan suatu aplikasi program misalnya programer. Metode ini digunakan untuk mengetahui tentang bentuk-bentuk sistem keamanan dengan menggunakan enkripsi
b.      Peninjauan dan Pengamatan
Pengamatan dengan langsung terjun kelapangan. Metode ini digunakan untuk mengetahui aplikasi ilmu yang diperoleh dibangku kuliah dengan aplikasi dalam praktek yang nyata.
c.      Penelitian Kepustakaan
Merupakan  cara  untuk  mendapatkan  landasan teori dengan mempelajari
dan mencatat literatur dan catatan-catatan kuliah dan penambahan catatan untuk penganalisaan kerusakan dan perbaikan sepeda motor yang erat hubungannya dengan penulisan Tugas Akhir ini.


1.6.            Sistematika Penulisan
Adapun untuk sistematika penulisan Tugas Akhir ini terdiri dari 5 bab, yaitu :
BAB I       : PENDAHULUAN
Pada bab ini  berisikan latar belakang masalah, identifikasi masalah, tujuan penulisan, batasan masalah, metode penelitian dan sistematika penulisan.
BAB II      : TINJAUAN TEORITIS
Dalam bab ini akan membahas tentang kriptografi sekuriti, algoritma sekuriti dan Microsoft Visual Basic 6.0.
BAB III    : PERANCANGAN SISTEM
Dalam bab ini membahas tentang analisa sistem dimana kebutuhan-kebutuhan apa saja yang diperlukan dalam pembuatan sistem dan pemecahannya serta rancangan sistemnya.
BAB IV    : IMPLEMENTASI
Dalam bab ini menjelaskan tentang sarana pengolahan data yang berisi perangkat keras (hardware), perangkat lunak (software) dan pelaksanaan pengolahan sistem aplikasi tersebut.
BAB V      : KESIMPULAN DAN SARAN
Dalam bab ini menyimpulkan apa yang ada pada bab-bab terdahulu serta memberikan saran atas penulisan tugas akhir ini.

BAB II
TINJAUAN TEORITIS

2.1        Kriptografi dan Sistem Informasi
Keamanan telah menjadi aspek yang sangat penting dari suatu sistem informasi. Sebuah informasi umumnya hanya ditujukan bagi segolongan tertentu. Oleh karena itu sangat penting untuk mencegahnya jatuh kepada pihak-pihak lain yang tidak berkepentingan. Untuk melaksanakan tujuan tersebutlah dirancang suatu sistem keamanan yang berfungsi melindungi sistem informasi.
Salah satu upaya pengamanan sistem informasi yang dapat dilakukan adalah kriptografi. Kriptografi sesungguhnya merupakan studi terhadap teknik matematis yang terkait dengan aspek keamanan suatu sistem informasi, antara lain seperti kerahasiaan, integritas data, otentikasi, dan ketiadaan penyangkalan. Keempat aspek tersebut merupakan tujuan fundamental dari suatu sistem kriptografi.
  1. Kerahasiaan (confidentiality)

Kerahasiaan adalah layanan yang digunakan untuk menjaga informasi dari setiap pihak yang tidak berwenang untuk mengaksesnya. Dengan demikian informasi hanya akan dapat diakses oleh pihak-pihak yang berhak saja.

  1. Integritas data (data integrity)
Integritas data merupakan layanan yang bertujuan untuk mencegah terjadinya pengubahan informasi oleh pihak-pihak yang tidak berwenang. Untuk meyakinkan integritas data ini harus dipastikan agar sistem informasi mampu mendeteksi terjadinya manipulasi data. Manipulasi data yang dimaksud di sini meliputi penyisipan, penghapusan, maupun penggantian data.
  1. Otentikasi (authentication)
Otentikasi merupakan layanan yang terkait dengan identifikasi terhadap pihak-pihak yang ingin mengakses sistem informasi (entity authentication) maupun keaslian data dari sistem informasi itu sendiri (data origin authentication).
  1. Ketiadaan penyangkalan (non-repudiation)
Ketiadaan penyangkalan adalah layanan yang berfungsi untuk mencegah terjadinya penyangkalan terhadap suatu aksi yang dilakukan oleh pelaku sistem informasi.

2.2       Mekanisme Kriptografi
Suatu sistem kriptografi (kriptosistem) bekerja dengan cara menyandikan suatu pesan menjadi suatu kode rahasia yang dimengerti oleh pelaku sistem informasi saja. Pada dasarnya mekanisme kerja semacam ini telah dikenal sejak jaman dahulu. Bangsa Mesir kuno sekitar 4000 tahun yang lalu bahkan telah mempraktekkannya dengan cara yang sangat primitif.
Dalam era teknologi informasi sekarang ini, mekanisme yang sama masih digunakan tetapi tentunya implementasi sistemnya berbeda. Sebelum membahas lebih jauh mekanisme kriptografi modern, berikut ini diberikan beberapa istilah yang umum digunakan dalam pembahasan kriptografi.

1.      Plaintext
Plaintext  (message)  merupakan  pesan  asli  yang  ingin  dikirimkan  dan
dijaga keamanannya. Pesan ini tidak lain dari informasi tersebut.
2.      Chipertext

Chipertext merupakan pesan yang telah dikodekan (disandikan) sehingga siap untuk dikirimkan.

3.      Chiper
Chiper merupakan algoritma matematis yang digunakan untuk proses penyandian plaintext menjadi ciphertext.
4.      Enkripsi
Enkripsi (encryption) merupakan proses yang dilakukan untuk menyandikan plaintext sehingga menjadi chipertext.
5.      Dekripsi
Dekripsi (decryption) merupakan proses yang dilakukan untuk memperoleh kembali plaintext dari chipertext.
6.      Kriptosistem
Kriptosistem merupakan sistem yang dirancang untuk mengamankan suatu sistem informasi dengan memanfaatkan kriptografi.
Urutan-urutan proses kriptografi dapat digambarkan sebagai berikut.

 


 

 

 


Gambar 2.1. Mekanisme kriptografi


Prosesnya pada dasarnya sangat sederhana. Sebuah plaintext (m) akan dilewatkan pada proses enkripsi (E) sehingga menghasilkan suatu ciphertext (c). Kemudian untuk memperoleh kembali plaintext, maka ciphertext (c) melalui proses dekripsi (D) yang akan menghasilkan kembali plaintext (m). Secara matematis proses ini dapat dinyatakan sebagai,

E(m) = c

D(c) = m
D(E(m)) = m
Kriptografi sederhana seperti ini menggunakan algoritma penyandian yang disebut cipher. Keamanannya bergantung pada kerahasiaan algoritma penyandian tersebut, karena itu algoritmanya harus dirahasiakan. Pada kelompok dengan jumlah besar dan anggota yang senantiasa berubah, penggunaannya akan menimbulkan masalah. Setiap ada anggota yang meninggalkan kelompok, algoritma harus diganti karena anggota ini dapat saja membocorkan algoritma.
Kriptografi modern selain memanfaatkan algoritma juga menggunakan kunci (key) untuk memecahkan masalah tersebut. Proses enkripsi dan dekripsi dilakukan dengan menggunakan kunci ini. Setiap anggota memiliki kuncinya masing-masing yang digunakan untuk proses enkripsi dan dekripsi yang akan dilakukannya. Dengan demikian ada sedikit perubahan yang harus dilakukan pada mekanisme yang digambarkan pada gambar 2.1 menjadi seperti gambar 2.2 berikut ini.
 




Gambar 2.2 Kriptografi berbasis kunci


Mekanisme kriptografi seperti ini dinamakan kriptografi berbasis kunci. Dengan demikian kriptosistemnya akan terdiri atas algoritma dan kunci, beserta segala plaintext dan ciphertextnya.
Persamaan matematisnya menjadi seperti berikut,

Ee(m) = c

Dd(c) = m
Dd(Ee(m)) = m
dengan,
e = kunci enkripsi
d = kunci dekripsi

2.3                      Kriptografi Simetrik dan Asimetrik
Berdasarkan jenis kunci yang digunakan dalam proses enkripsi dan dekripsi, kriptografi dapat dibedakan menjadi dua jenis, yaitu kriptografi simetrik dan kriptografi asimetrik. Perbedaan utama di antara keduanya terletak pada sama dan tidaknya kunci yang digunakan dalam proses enkripsi dengan kunci yang digunakan pada proses dekripsi.

2.3.1        Kriptografi Simetrik
Kriptografi simetrik (symmetric cryptography) atau dikenal pula sebagai kriptografi kunci rahasia (secret-key cryptography), merupakan kriptografi yang menggunakan kunci yang sama baik untuk proses enkripsi maupun dekripsi. Secara matematis dapat dinyatakan bahwa :

e = d = k
Ek(m) = c
Dk(c) = m
Kriptografi simetrik sangat menekankan pada kerahasiaan kunci yang digunakan untuk proses enkripsi dan dekripsi. Oleh karena itulah kriptografi ini dinamakan pula sebagai kriptografi kunci rahasia.
            Mekanisme kerja kriptografi simetrik antara dua pelaku sistem informasi, Alice dan Bob, adalah sebagai berikut,
1.            Alice dan Bob menyetujui algoritma simetrik yang akan digunakan.
2.            Alice dan Bob menyetujui kunci yang akan dipakai.
3.            Alice membuat pesan plaintext yang akan dikirimkan kepada Bob, lalu melakukan proses enkripsi dengan menggunakan kunci dan algoritma yang telah disepakati sehingga menghasilkan ciphertext.
4.            Alice mengirimkan ciphertext tersebut kepada Bob.
5.            Bob menerima ciphertext, lalu melakukan dekripsi dengan menggunakan kunci dan algoritma yang sama sehingga dapat memperoleh plaintext tersebut.
Gambar berikut memberikan ilustrasi mekanisme kriptografi simetrik ini.


 











Gambar 2.3 Mekanisme kriptografi simetrik


Dari gambar 2.3 dapat dilihat bahwa harus ada jalur aman (secure channel) dahulu yang memungkinkan Bob dan Alice melakukan transaksi kunci. Hal ini menjadi masalah karena jika jalur itu memang ada, tentunya kriptografi tidak diperlukan lagi dalam hal ini. Masalah ini dikenal sebagai masalah persebaran kunci (key distribution problem). Kelemahan lainnya adalah bahwa untuk tiap pasang pelaku sistem informasi diperlukan sebuah kunci yang berbeda. Dengan demikian bila terdapat n pelaku sistem informasi, maka agar tiap pasang dapat melakukan komunikasi diperlukan kunci sejumlah total n ( n – 1) / 2 kunci. Untuk jumlah n yang sangat besar, penyediaan kunci ini akan menjadi masalah, yang dikenal sebagai masalah manajemen kunci (key management problem).
Namun di samping kelemahan tersebut, kriptografi simetrik memiliki keuntungan juga. Keuntungan menggunakan kriptografi simetrik ini adalah kecepatan operasinya yang sangat baik. Dibandingkan dengan kriptografi asimetrik, kriptografi simetrik memiliki kecepatan operasi yang jauh lebih cepat.

2.3.2        Kriptografi Asimetrik
Kriptografi asimetrik (asymmetric cryptography) menggunakan kunci enkripsi dan kunci dekripsi yang berbeda. Kunci enkripsi dapat disebarkan kepada umum dan dinamakan sebagai kunci publik (public key) sedangkan kunci dekripsi disimpan untuk digunakan sendiri dan dinamakan sebagai kunci pribadi (private key). Oleh karena itulah, kriptografi ini dikenal pula dengan nama kriptografi kunci publik (public key cryptography).
Pada kriptosistem asimetrik, setiap pelaku sistem informasi memiliki sepasang kunci, yaitu kunci publik dan kunci pribadi. Kunci publik didistribusikan kepada umum, sedangkan kunci pribadi disimpan untuk diri sendiri. Dengan menggunakan kriptografi asimetrik, mekanisme pengiriman pesan oleh Alice kepada Bob menjadi seperti gambar berikut ini.



 














Gambar 2.4 Mekanisme kriptografi asimetrik


Langkah-langkahnya adalah sebagai berikut,
  1. Alice mengambil kunci publik milik Bob yang didistribusikan kepada umum.
  2. Alice melakukan enkripsi terhadap plaintext dengan kunci publik Bob tersebut sehingga menghasilkan ciphertext.
  3. Alice mengirimkan ciphertext kepada Bob.
  4. Bob yang menerima ciphertext tersebut melakukan proses dekripsi dengan menggunakan kunci pribadi miliknya sehingga mendapatkan plaintext semula.
Dengan cara ini masalah yang dihadapi pada kriptografi simetrik bisa dipecahkan. Sebuah jalur aman untuk distribusi kunci tidak lagi diperlukan. Selain itu manajemen kuncinya lebih mudah. Karena tiap pelaku sistem informasi memiliki sepasang kunci, maka untuk n pelaku dibutuhkan total 2n kunci saja. Namun demikian, kriptografi asimetrik memiliki kecepatan operasi yang jauh lebih lambat daripada kriptografi simetrik.
Salah satu kriptografi asimetrik yang banyak dipakai sekarang ini adalah RSA. RSA menjadi standar de facto kriptografi asimetrik dunia dan banyak dipakai pada transaksi-transaksi data dalam protokol.

2.3.3        Kriptografi Gabungan
Kriptografi yang digunakan sekarang ini merupakan kombinasi antara kriptografi simetrik dengan asimetrik. Dengan cara ini, keunggulan dari kedua sistem kriptografi ini dapat dimanfaatkan sementara kekurangannya dapat diminimisasi.
Skenario kriptografi gabungan ini bekerja sebagai berikut,
  1. Alice mengambil kunci publik milik Bob yang didistribusikan kepada umum.
  2. Alice membangkitkan bilangan acak yang akan digunakan sebagai kunci simetriknya. Bilangan acak ini kemudian dienkripsi dengan menggunakan kunci publik milik Bob.
  3. Kunci simetrik yang telah dienkripsi ini dikirimkan kepada Bob.
  4. Bob yang menerimanya melakukan proses dekripsi dengan menggunakan kunci pribadi miliknya sehingga mendapatkan kunci simetrik tersebut.
  5. Setelah kunci simetrik berhasil ditransfer dengan aman, selanjutnya keduanya berkomunikasi dengan menggunakan kunci simetrik tersebut.
Keuntungan dengan menggunakan skenario gabungan ini tidak lain bahwa kecepatan proses kriptografi simetrik dimanfaatkan secara maksimal, sementara itu masalah ketiadaan jalur aman untuk transfer kunci simetrik diatasi dengan menggunakan kriptografi asimetrik. Dalam implementasi kriptosistem modern, skenario kriptografi gabungan ini sangat populer.

2.4                      Keamanan Sistem Kriptografi
Keamanan suatu sistem kriptografi merupakan masalah yang paling fundamental. Dengan menggunakan sistem standar terbuka, maka keamanan suatu sistem kriptografi akan lebih mudah dan lebih cepat dianalisa. Mengingat kenyataan inilah maka sekarang tidak digunakan lagi algoritma rahasia yang tidak diketahui tingkat keamanannya.
Sebuah sistem kriptografi dirancang untuk menjaga plaintext dari kemungkinan dibaca oleh pihak-pihak yang tidak berwenang, yang secara umum dinamakan sebagai penyerang (attacker). Penyerang diasumsikan memiliki akses tak terbatas terhadap jalur tak aman yang digunakan untuk transaksi ciphertext. Oleh karena itu, penyerang dianggap memiliki akses langsung terhadap ciphertext.
Tipe penyerang paling umum terhadap suatu sistem kriptografi adalah serangan kriptanalisis (cryptanalysis attack). Kriptanalisis merupakan ilmu yang mempelajari tentang upaya-upaya untuk memperoleh plaintext dari ciphertext tanpa informasi tentang kunci yang digunakan.

2.5.     Penggunaan Sistem Kriptografi
Sistem kriptografi pada era sistem informasi ini telah dimanfaatkan dalam pengamanan suatu sistem informasi. Pada jaringan TCP/IP (Transfer Control Protocol/Internet Protocol) misalnya, kriptografi telah dimanfaatkan pada protokol S/HTTP.  Protokol S/HTTP (Secure Hypertext Transfer Protocol) saat ini digunakan untuk transaksi HTTP dengan memanfaatkan kriptografi sebagai mekanisme untuk menyandikan pesan yang dikirim.
Gambar dibawah ini menunjukkan mekanisme enkapsulasi data pada jaringan TCP/IP tanpa dan dengan kriptografi.










Gambar 2.5 Kriptografi pada TCP/IP

Dapat dilihat bahwa ada penambahan satu layer baru yang dinamakan sebagai SSL (Secure Socket Layer). Layer ini berfungsi untuk melaksanakan mekanisme kriptografi terhadap informasi sebelum dilakukan enkapsulasi dan pengiriman data. Penambahan layer SSL ini menyebabkan terbentuknya protokol baru yang dinamakan HTTPS, menggantikan protokol HTTP untuk transaksi HTTP yang aman. Protokol ini digunakan untuk mengamankan transaksi-transaksi data pada web-web e-commerce.
Gambar berikut menunjukkan protokol HTTPS tersebut.


 







Gambar 2.6 Protokol HTTPS


BAB III
PERANCANGAN SISTEM

3.1.      Analisa Sistem Yang Sedang Berjalan
            Analisa sistem yang sedang berjalan pada sebuah program distribusi kartu pada sebuah perusahaan telekomunikasi di Medan menunjukkan bahwasanya dalam akses keamanan dalam program distribusi kartu tersebut sangat tidak terjamin dan semua pegawai ataupun orang lain dapat menggunakan program tersebut sehingga yang nantinya akan mengakibatkan kesalahan data dan kerusakan dalam program kerja dimana laporan-laporan yang akan dihasilkan tidak sesuai dengan fakta yang terjadi di lapangan. Misalnya jika ada pegawai atau orang luar yang dapat menggunakan program tersebut maka dia dapat melakukan transaksi permintaan kartu yang fiktif dari sebuah toko distributor maka data transaksi tersebut akan masuk kedalam laporan dan pihak perusahaan akan membuat laporan tersebut ataupun laporan permintaan tersebut langsung akan direalisasikan dan perusahaan akan mengirim barang permintaan toko distributor dan ketika diantar bahwasanya toko tidak pernah memesan barang tersebut.
Dari hasil penganalisaan penulis, titik kelemahan dari program distribusi kartu tersebut adalah pada menu login. Pada menu login terlihat user name dan passwordnya tidak terenkripsi sehingga memudahkan orang yang tidak bertanggung jawab mudah masuk menggunakan user name dan password untuk melakukan hal-hal yang merusak kinerja sistem perusahaan.
 








Gambar 3.1. Diagram aliran data fisik sistem yang sedang berjalan
 













Gambar 3.2. Diagram aliran data logis sistem yang sedang berjalan
3.2.      Sistem Yang Diusulkan
Karena lemahnya sistem keamanan dan kerahasian data setelah penulis analis pada sistem yang sedang berjalan, maka sehingga perlu dikembangkan lagi bentuk keamanan dan kerahasian data dengan melakukan pengenkripsian menu password tersebut sehingga orang dapat tidak dapat melakukan login dengan menggunakan user id dan password yang terdaftar karena walaupun orang tersebut dapat menembus dan masuk kedalam database login tetapi ketika orang yang dapat menembus database login program ini tetapi dia tidak akan menemukan password dari user-user id dan hanya akan terlihat user id saja karena isi dari passwordnya telah berubah bentuk karena telah terenkripsi pada saat melakukan pendaftaran user id dan password.
Bentuk pengenkripsian terotomatis pada saat pendaftaran user id dan password pertama sekali. Dan bila ingin











 















Gambar 3.3. Diagram aliran data logis sistem diusulkan

Terlihat pada gambar diatas setiap pengguna/pegawai yang akan melakukan kegiatan menggunakan sistem informasi kartu harus melakukan input user id dan password. Setelah user id dan password program otomatis akan mengecek apakah user id dan password terdapat didalam database dan mencocokkannya. Saat pengguna selesai mengisi user id dan password dan mengenter ok otomatis program akan mendeskripsikan password didalam database. Jika user id dan password cocok maka pengguna dapat menggunakan program sistem informasi kartu dan jika tidak cocok maka pengguna diharuskan mengulang pengisian user id dan password.
Dan bagi pengguna yang belum memiliki user id dan password harus menghubungi super admin atau meminta kepada yang sudah memiliki user id dan password untuk mendaftarkan user id dan passwordnya kedalam database. Untuk mendaftar dan mengubah password digunakan menu user account. Pada saat pendaftaran user id dan password program otomatis akan mengenkripsikan password kedalam bentuk enkripsi didalam database login.

3.3.      Perancangan Basis Data
Adapun disini penulis hanya menampilkan bentuk struktur data tampilan rancangan basis data login.
Data Login
Tabel 3.1. Data login
Field Name
Type Field
Width
Keterangan
UserId
Text
8
Untuk menyimpan user name pengguna
Pass
Text
10
Untuk menyimpan password pengguna
Status
Text
15
Untuk menyimpan status pengguna

3.4.      Perancangan Program Enkripsi
Perancangan program enkripsi ini digunakan untuk membantu pengamanan database login pada program sistem informasi kartu.
3.4.1.   Perancangan Form
 







Gambar 3.4. Perancangan form login

Sebelum masuk kedalam program terdapat menu yang pertama yaitu menu login. Jadi setiap pengguna yang akan menggunakan program sistem informasi kartu ini harus melakukan login. Dalam menu login ini pengguna harus mengisikan user id dan password.


 










Gambar 3.5. Perancangan menu utama sistem informasi kartu
Form menu utama merupakan induk dimana penginputan data, transaksi-transaksi serta laporan-laporan diletakkan disini (dimulai dari sini).
 













Gambar 3.6. Perancangan form user account

Pada menu user account ini digunakan untuk mendaftarkan pengguna yang akan menggunakan program sistem informasi kartu dan bila pengguna yang ingin mengganti password yang lama.

3.4.2.   Perancangan Struktur Program
Adapun struktur program dari program sistem informasi kartu adalah sebagai berikut :
 





Gambar 3.7. Struktur program login
 







Gambar 3.8. Struktur program menu utama sistem informasi kartu


 






Gambar 3.9. Struktur submenu user management



3.4.3.   Perancangan  Flowchart
Flowchar login




















Gambar 3.10. Flowchart login
Flowchart menu utama


 


















Gambar 3.11. Flowchart menu utama sistem informasi kartu



Flowchart user management


 







Gambar 3.12. Flowchart user management














Flowchar user account








 


T
 
T
 
F
 
F
 
T
 


F
 



F
 
T
 


F
 
T
 


F
 
F
 


T
 



Gambar 3.13. Flowchart user account



 
BAB III
PERANCANGAN SISTEM

3.1.      Analisa Sistem Yang Sedang Berjalan
            Analisa sistem yang sedang berjalan pada sebuah program distribusi kartu pada sebuah perusahaan telekomunikasi di Medan menunjukkan bahwasanya dalam akses keamanan dalam program distribusi kartu tersebut sangat tidak terjamin dan semua pegawai ataupun orang lain dapat menggunakan program tersebut sehingga yang nantinya akan mengakibatkan kesalahan data dan kerusakan dalam program kerja dimana laporan-laporan yang akan dihasilkan tidak sesuai dengan fakta yang terjadi di lapangan. Misalnya jika ada pegawai atau orang luar yang dapat menggunakan program tersebut maka dia dapat melakukan transaksi permintaan kartu yang fiktif dari sebuah toko distributor maka data transaksi tersebut akan masuk kedalam laporan dan pihak perusahaan akan membuat laporan tersebut ataupun laporan permintaan tersebut langsung akan direalisasikan dan perusahaan akan mengirim barang permintaan toko distributor dan ketika diantar bahwasanya toko tidak pernah memesan barang tersebut.
Dari hasil penganalisaan penulis, titik kelemahan dari program distribusi kartu tersebut adalah pada menu login. Pada menu login terlihat user name dan passwordnya tidak terenkripsi sehingga memudahkan orang yang tidak bertanggung jawab mudah masuk menggunakan user name dan password untuk melakukan hal-hal yang merusak kinerja sistem perusahaan.
 








Gambar 3.1. Diagram aliran data fisik sistem yang sedang berjalan
 













Gambar 3.2. Diagram aliran data logis sistem yang sedang berjalan
3.2.      Sistem Yang Diusulkan
Karena lemahnya sistem keamanan dan kerahasian data setelah penulis analis pada sistem yang sedang berjalan, maka sehingga perlu dikembangkan lagi bentuk keamanan dan kerahasian data dengan melakukan pengenkripsian menu password tersebut sehingga orang dapat tidak dapat melakukan login dengan menggunakan user id dan password yang terdaftar karena walaupun orang tersebut dapat menembus dan masuk kedalam database login tetapi ketika orang yang dapat menembus database login program ini tetapi dia tidak akan menemukan password dari user-user id dan hanya akan terlihat user id saja karena isi dari passwordnya telah berubah bentuk karena telah terenkripsi pada saat melakukan pendaftaran user id dan password.
Bentuk pengenkripsian terotomatis pada saat pendaftaran user id dan password pertama sekali. Dan bila ingin











 















Gambar 3.3. Diagram aliran data logis sistem diusulkan

Terlihat pada gambar diatas setiap pengguna/pegawai yang akan melakukan kegiatan menggunakan sistem informasi kartu harus melakukan input user id dan password. Setelah user id dan password program otomatis akan mengecek apakah user id dan password terdapat didalam database dan mencocokkannya. Saat pengguna selesai mengisi user id dan password dan mengenter ok otomatis program akan mendeskripsikan password didalam database. Jika user id dan password cocok maka pengguna dapat menggunakan program sistem informasi kartu dan jika tidak cocok maka pengguna diharuskan mengulang pengisian user id dan password.
Dan bagi pengguna yang belum memiliki user id dan password harus menghubungi super admin atau meminta kepada yang sudah memiliki user id dan password untuk mendaftarkan user id dan passwordnya kedalam database. Untuk mendaftar dan mengubah password digunakan menu user account. Pada saat pendaftaran user id dan password program otomatis akan mengenkripsikan password kedalam bentuk enkripsi didalam database login.

3.3.      Perancangan Basis Data
Adapun disini penulis hanya menampilkan bentuk struktur data tampilan rancangan basis data login.
Data Login
Tabel 3.1. Data login
Field Name
Type Field
Width
Keterangan
UserId
Text
8
Untuk menyimpan user name pengguna
Pass
Text
10
Untuk menyimpan password pengguna
Status
Text
15
Untuk menyimpan status pengguna

3.4.      Perancangan Program Enkripsi
Perancangan program enkripsi ini digunakan untuk membantu pengamanan database login pada program sistem informasi kartu.
3.4.1.   Perancangan Form
 







Gambar 3.4. Perancangan form login

Sebelum masuk kedalam program terdapat menu yang pertama yaitu menu login. Jadi setiap pengguna yang akan menggunakan program sistem informasi kartu ini harus melakukan login. Dalam menu login ini pengguna harus mengisikan user id dan password.


 










Gambar 3.5. Perancangan menu utama sistem informasi kartu
Form menu utama merupakan induk dimana penginputan data, transaksi-transaksi serta laporan-laporan diletakkan disini (dimulai dari sini).
 













Gambar 3.6. Perancangan form user account

Pada menu user account ini digunakan untuk mendaftarkan pengguna yang akan menggunakan program sistem informasi kartu dan bila pengguna yang ingin mengganti password yang lama.

3.4.2.   Perancangan Struktur Program
Adapun struktur program dari program sistem informasi kartu adalah sebagai berikut :
 





Gambar 3.7. Struktur program login
 







Gambar 3.8. Struktur program menu utama sistem informasi kartu


 






Gambar 3.9. Struktur submenu user management



3.4.3.   Perancangan  Flowchart
Flowchar login




















Gambar 3.10. Flowchart login
Flowchart menu utama


 


















Gambar 3.11. Flowchart menu utama sistem informasi kartu



Flowchart user management


 







Gambar 3.12. Flowchart user management














Flowchar user account








 


T
 
T
 
F
 
F
 
T
 


F
 



F
 
T
 


F
 
T
 


F
 
F
 


T
 


BAB IV
IMPLEMENTASI PROGRAM

4.1.            Kebutuhan Sistem
Sistem pengolahan data merupakan satu kesatuan kegiatan pengolahan data atau informasi yang terdiri dari prosedur dan pelaksana data. Penggunaan komputer sebagai alat pengolahan data haruslah menyediakan fasilitas-fasilitas pendukung dalam pengolahan data nantinya. Secara proporsional harus memenuhi aspek teknis yaitu :
1.      Perangkat Keras (Hardware)
2.      Perangkat Lunak (Software)

4.1.1.      Perangkat Keras (Hardware)
Dalam merancang dan menjalankan program perhitungan sistem informasi kartu sehingga program berjalan dengan lancar, dibutuhkan hardware dengan spesifikasi sebagai berikut :
1.      Procesor minimum Pentium III 750 Mhz
2.      Memory minimum 128 MB
3.      Harddisk minimum 2 GB
4.      Monitor SVGA dan Video Grafik minimum 8 MB
5.      Keyboard an Mouse

4.1.2.      Perangkat Lunak (Software)
Sedangkan spesifikasi perangkat lunak (software) yang dibutuhkan untuk menunjang aktivitas berjalannya sistem dengan baik adalah :
1.      Microsoft Visual Basic 6.0
2.      Sistem operasi Windows XP

4.2.      Implementasi Program
Pada tahap implementasi ini penulis mencoba melakukan percobaan pengamanan database login pada sebuah program distribusi barang dengan menggunakan enkripsi pada data password pengguna sehingga pengguna yang berhak saja yang dapat menggunakan program sistem informasi kartu tersebut. 
Untuk dapat masuk ke dalam menu program sistem informasi kartu setiap pengguna harus melakukan login program dengan memasukkan User ID dan Password bila User ID dan Password sudah terdaftar dan sesuai dengan yang ada didatabase maka program sistem informasi kartu dapat terbuka (digunakan). Jika User ID dan Password tidak terdaftar dan salah maka program sistem informasi kartu tidak dapat digunakan (terbuka). Terlihat pada gambar berikut menu login untuk masuk ke dalam program sistem informasi kartu.
Gambar 4.1. Menu login

Untuk melakukan login pengguna harus memasukkan User ID selanjutnya memasukkan passwordnya kemudian tekan login. Dan bila pengisian User ID dan Password anda ada yang salah dapat menekan tombol batal. Setelah tombol login ditekan dan User ID dan password sesuai dengan didatabase maka pengguna dapat melihat menu utama program sistem informasi kartu seperti pada gambar 4.2. berikut.


Gambar 4.2. Menu utama program

Bagi pengguna yang ingin mendaftar atau mengubah password lamanya dapat menggunakan user manangement kemudian pilih user account.
Gambar 4.3. Menu user account

Setelah masuk kedalam menu user account. Bagi pengguna yang mendaftar dapat mengklik tombol new kemudian isikan User ID dan Password dan isi ulang Password dan pilih statusnya. Pada gambar 4.3. ditampilkan contoh pengisian user account yang baru.
Gambar 4.4. Tampilan pengisian user account

Setelah seluruh inputan diisi maka dilanjutkan untuk menyimpan atau bila anda ada merasa ragu dengan User ID ataupun pengisian password dan ulangi password ataupun salah dalam memilih status dapat menekan tombol cancel. Dan untuk keluar dari program user account dapat mengklik tombol close.




Gambar 4.5. Bentuk pengisian user account

Setelah data-data yang harus diisi telah penulis isi dan penulis telah menyimpannya maka data penulis tampak pada tabel user id didalam user account dimana ditampilkan pada tabel tersebut seluruh pengguna yang telah terdaftar dengan statusnya.
Selanjutnya kita dapat melihat bentuk basisdata pengenkripsian dari pengisian data-data pada menu user account pada tabel database login seperti yang ditunjukkan pada gambar 4.6. berikut.



Gambar 4.6. Tabel database login

Pada gambar diatas terlihat bentuk pengenkripsian daripada database dimana yang dienkripsi adalah data password dari user id. Dengan pengenkripsian tersebut seseorang yang ingin menggunakan program sistem informasi kartu tidak dapat menggunakan user id yang lain untuk masuk ke dalam program sistem informasi kartu karena data passwordnya telah terenkripsi.



Gambar 4.7. Penggantian password lama

Disini penulis mencoba untuk mengganti password lamanya dengan password baru. Dalam pergantian password ini pengguna harus mengisi data-data User ID dan password lama serta statusnya. Setelah data-data tersebut diisi maka tekan tombol lanjut.
Setelah tombol lanjut ditekan maka akan muncul pengisian data-data untuk pengisian data-data baru anda seperti halnya pada gambar 4.4. Setelah data-data baru penulis isi kemudian penulis menyimpannya.
Berikut penulis tampilkan database dari data-data penulis yang baru seperti pada gambar 4.8 berikut.
Gambar 4.8. Bentuk database login



Gambar 3.13. Flowchart user account

BAB V
KESIMPULAN DAN SARAN

5.1.            Kesimpulan
   Setelah penulis menguraikan semuanya tentang perancangan dan implementasi dari enkripsi data login ini, maka penulis mengambil beberapa kesimpulan yaitu :
1.      Dengan pengenkripsian database pada sebuah program dapat membantu pengamana program dari pengguna yang tidak bertanggung jawab.
2.      Banyaknya bentuk-bentuk algoritma untuk metode enkripsi dan deskripsi sebagai pengembangan ilmu pengetahuan tentang kriptografi sekuriti sistem.
3.      Salah satu upaya pengamanan sistem informasi yang dapat dilakukan adalah dengan kriptografi sekuriti sistem.

5.2.            Saran
Adapun saran-saran yang penulis kemukakan adalah sebagai berikut :
1.      Kiranya dalam pengajaran mata kuliah kriptografi dan sekuriti dapat dianjarkan tentang implementasi dari kriptografi tersebut.
2.      Apikasi enkripsi yang penulis kerjakan kiranya dapat dikembangkan kedalam bentuk pengamanan yang lebih baik lagi.
 

IMPLEMENTASI PENGAMANAN BASIS DATA DENGAN TEKNIK ENKRIPSI

 

DAFTAR PUSTAKA

A. Rahmani, Implementasi Teknik Kriptografi Blowfish untuk Pengamanan Basis Data, Tesis Magister Departemen Teknik Informatika, ITB, 2003.

A. Silberschatz, H. F. Korth. Dan S. Sudarshan, Database System Concepts, 4th Edition, McGraw – Hill, 2002.

B. Schneier, Applied Cryptography: Protocols, Algorithms, and Source Code in C, 2nd Edition,John Wiley & Sons, Inc, 1996.

B. Sukmawan, RC4 Stream Cipher, 1998.

B. Trower, Crypt Data Packaging, Trantor Standard Systems Inc.

Ir. Fathansyah, Basis Data, Informatika, Bandung, 1999.

R. Munir, Bahan Kuliah IF5054 Kriptografi, Departemen Teknik Informatika, ITB, 2004.

T. Marcus, A. Prijono dan J.Widiadhi, DELPHI DEVELOPER dan SQL Server 2000, Informatika, Bandung, 2004.

LAMPIRAN

A.        LISTING PROGRAM

Form Main.

Private Sub bright1_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Brighter Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr + 1, texg + 1, texb + 1)
    Next X
    Next Y
End Sub
'[BRIGHTEN + 5]
Private Sub bright5_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Brighter Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr + 5, texg + 5, texb + 5)
    Next X
    Next Y
End Sub
'[BRIGHTEN + 10]
Private Sub bright10_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Brighter Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr + 10, texg + 10, texb + 10)
    Next X
    Next Y
End Sub

Private Sub BrushStyle_Change()
    If BrushStyle.Text = "Custom Brush" Then
        frmBrush.Show
    Else
        Unload frmBrush
    End If
End Sub
Private Sub BrushStyle_Click()
    If BrushStyle.Text = "Custom Brush" Then
        frmBrush.Show
    Else
        Unload frmBrush
    End If
End Sub

'[DARKEN - 1]
Private Sub dark1_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Darker Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr - 1, texg - 1, texb - 1)
    Next X
    Next Y
End Sub
'[DARKEN - 5]
Private Sub dark5_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Darker Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr - 5, texg - 5, texb - 5)
    Next X
    Next Y
End Sub
'[DARKEN - 10]
Private Sub dark10_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Darker Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr - 10, texg - 10, texb - 10)
    Next X
    Next Y
End Sub

Private Sub DrawType_Change()
    If Not DrawType.Caption = "Pen" Or DrawType.Caption = "Marker" Then
        Unload frmBrush
    End If
End Sub

'######################################## GREY SCALE #########################################

'[GREY SCALE]
Private Sub grey_Click()
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'The Grey Color = Average Of RGB In Pixle
        greycolor = (texr + texg + texb) / 3
        'Set Pixle With Grey Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(greycolor, greycolor, greycolor)
    Next X
    Next Y
End Sub
'[GREY SCALE (TOP HALF)]
Private Sub greyTop_Click()
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY) / 2
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY) / 2
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'The Grey Color = Average Of RGB In Pixle
        greycolor = (texr + texg + texb) / 3
        'Set Pixle With Grey Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(greycolor, greycolor, greycolor)
    Next X
    Next Y
End Sub
'[GREY SCALE (BOTTOM HALF)]
Private Sub greyBottom_Click()
    For Y = (frmD.PicBox.Height / Screen.TwipsPerPixelY) / 2 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'The Grey Color = Average Of RGB In Pixle
        greycolor = (texr + texg + texb) / 3
        'Set Pixle With Grey Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(greycolor, greycolor, greycolor)
    Next X
    Next Y
End Sub
'[GREY SCALE (LEFT HALF)]
Private Sub greyLeft_Click()
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX) / 2
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'The Grey Color = Average Of RGB In Pixle
        greycolor = (texr + texg + texb) / 3
        'Set Pixle With Grey Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(greycolor, greycolor, greycolor)
    Next X
    Next Y
End Sub
'[GREY SCALE (RIGHT HALF)]
Private Sub greyRight_Click()
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = (frmD.PicBox.Height / Screen.TwipsPerPixelX) / 2 To (frmD.PicBox.Height / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'The Grey Color = Average Of RGB In Pixle
        greycolor = (texr + texg + texb) / 3
        'Set Pixle With Grey Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(greycolor, greycolor, greycolor)
    Next X
    Next Y
End Sub

'####################################### INVERT COLORS #######################################

'[INVERT COLORS]
Private Sub invert_Click()
    GetObject frmD.PicBox.Image, Len(PicInfo), PicInfo
    BytesPerLine = (PicInfo.bmWidth * 3 + 3) And &HFFFFFFFC
    ReDim PicBits(1 To BytesPerLine * PicInfo.bmHeight * 3) As Byte
    GetBitmapBits frmD.PicBox.Image, UBound(PicBits), PicBits(1)
    For Cnt = 1 To UBound(PicBits)
        PicBits(Cnt) = 255 - PicBits(Cnt)
    Next Cnt
    SetBitmapBits frmD.PicBox.Image, UBound(PicBits), PicBits(1)
    frmD.PicBox.Refresh
End Sub
'[INVERT (TOP HALF)]
Private Sub invertTop_Click()
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY) / 2
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY) / 2
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Inverted Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(255 - texr, 255 - texg, 255 - texb)
    Next X
    Next Y
End Sub
'[INVERT (BOTTOM HALF)]
Private Sub invertBottom_Click()
    For Y = (frmD.PicBox.Height / Screen.TwipsPerPixelY) / 2 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Inverted Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(255 - texr, 255 - texg, 255 - texb)
    Next X
    Next Y
End Sub
'[INVERT (LEFT HALF)]
Private Sub invertLeft_Click()
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX) / 2
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Grey Color'
        SetPixel frmD.PicBox.hdc, X, Y, RGB(255 - texr, 255 - texg, 255 - texb)
    Next X
    Next Y
End Sub
'[INVERT (RIGHT HALF)]
Private Sub invertRight_Click()
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = (frmD.PicBox.Height / Screen.TwipsPerPixelX) / 2 To (frmD.PicBox.Height / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Grey Color'
        SetPixel frmD.PicBox.hdc, X, Y, RGB(255 - texr, 255 - texg, 255 - texb)
    Next X
    Next Y
End Sub

'######################################### ADD NOISE #########################################

'[ADD BRIGHT NOISE]
Private Sub AddBrightNoise_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Bright Noise
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr + Int(Rnd * 100), texg + Int(Rnd * 100), texb + Int(Rnd * 100))
    Next X
    Next Y
End Sub
'[ADD DARK NOISE]
Private Sub AddDarkNoise_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Dark Noise Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr - Int(Rnd * 100), texg - Int(Rnd * 100), texb - Int(Rnd * 100))
    Next X
    Next Y
End Sub

'####################################### DODGE / BURN ########################################

'[DODGE]
Private Sub Dodge_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Dodged Colors
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr * 2, texg * 2, texb * 2)
    Next X
    Next Y
End Sub
'[DODGE (TOP HALF)]
Private Sub dodgeTop_Click()
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY) / 2
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY) / 2
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Grey Color'
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr * 2, texg * 2, texb * 2)
    Next X
    Next Y
End Sub
'[DODGE (BOTTOM HALF)]
Private Sub dodgeBottom_Click()
    For Y = (frmD.PicBox.Height / Screen.TwipsPerPixelY) / 2 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Dodged Colors
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr * 2, texg * 2, texb * 2)
    Next X
    Next Y
End Sub
'[DODGE (LEFT HALF)]
Private Sub dodgeLeft_Click()
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX) / 2
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Dodged Colors
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr * 2, texg * 2, texb * 2)
    Next X
    Next Y
End Sub
'[DODGE (RIGHT HALF)]
Private Sub dodgeRight_Click()
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = (frmD.PicBox.Height / Screen.TwipsPerPixelX) / 2 To (frmD.PicBox.Height / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'The Grey Color = Average Of RGB In Pixle
        greycolor = (texr + texg + texb) / 3
        'Set Pixle With Dodged Colors
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr * 2, texg * 2, texb * 2)
    Next X
    Next Y
End Sub
'[BURN]
Private Sub Burn_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Dodged Colors
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr / 2, texg / 2, texb / 2)
    Next X
    Next Y
End Sub
'[BURN (TOP HALF)]
Private Sub burnTop_Click()
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY) / 2
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY) / 2
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Burnt Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr / 2, texg / 2, texb / 2)
    Next X
    Next Y
End Sub
'[BURN (BOTTOM HALF)]
Private Sub burnBottom_Click()
    For Y = (frmD.PicBox.Height / Screen.TwipsPerPixelY) / 2 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Burnt Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr / 2, texg / 2, texb / 2)
    Next X
    Next Y
End Sub
'[BURN (LEFT HALF)]
Private Sub burnLeft_Click()
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX) / 2
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Burnt Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr / 2, texg / 2, texb / 2)
    Next X
    Next Y
End Sub
'[BURN (RIGHT HALF)]
Private Sub burnRight_Click()
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = (frmD.PicBox.Height / Screen.TwipsPerPixelX) / 2 To (frmD.PicBox.Height / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Burnt Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr / 2, texg / 2, texb / 2)
    Next X
    Next Y
End Sub

'########################################### FADE ############################################

'[FADE BOTTOM]
Private Sub FadeBottom_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Y Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr + Y, texg + Y, texb + Y)
    Next X
    Next Y
End Sub
'[FADE RIGHT]
Private Sub FadeRight_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With X Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr + X, texg + X, texb + X)
    Next X
    Next Y
End Sub
'[FADE BOTTOM LEFT]
Private Sub FadeLeftUp_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Y-X Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr + Y - X, texg + Y - X, texb + Y - X)
    Next X
    Next Y
End Sub
'[FADE TOP RIGHT]
Private Sub FadeRightDown_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With X-Y Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr + X - Y, texg + X - Y, texb + X - Y)
    Next X
    Next Y
End Sub

'################################### REMOVE COLOR (RGB) ######################################

'[NO RED]
Private Sub NoRed_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Green And Blue Colors
        SetPixel frmD.PicBox.hdc, X, Y, RGB(0, texg, texb)
    Next X
    Next Y
End Sub
'[NO GREEN]
Private Sub NoGreen_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Red And Blue Colors
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr, 0, texb)
    Next X
    Next Y
End Sub
'[NO BLUE]
Private Sub NoBlue_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Red And Green Colors
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr, texg, 0)
    Next X
    Next Y
End Sub

'###################################### COLORIZE (RGB) #######################################

'[RED FILTER]
Private Sub RedFilter_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Red Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(texr, 0, 0)
    Next X
    Next Y
End Sub
'[GREEN FILTER]
Private Sub GreenFilter_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Green Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(0, texg, 0)
    Next X
    Next Y
End Sub
'[BLUE FILTER]
Private Sub BlueFilter_Click()
On Error Resume Next
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Blue Color
        SetPixel frmD.PicBox.hdc, X, Y, RGB(0, 0, texb)
    Next X
    Next Y
End Sub

'###################################### STRIPES ########################################

Private Sub addDotGrid_Click()
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY) Step 10
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX) Step 10
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Burnt Color
        SetPixel frmD.PicBox.hdc, X, Y, Color1.BackColor
    Next X
    Next Y
End Sub

Private Sub addHorizontal_Click()
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY) Step 10
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX)
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Burnt Color
        SetPixel frmD.PicBox.hdc, X, Y, Color1.BackColor
    Next X
    Next Y
End Sub

Private Sub addVertical_Click()
    For Y = 0 To (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Max = (frmD.PicBox.Height / Screen.TwipsPerPixelY)
    PG.Value = Y
        If PG.Value = PG.Max Then
            PG.Value = 0
        End If
    For X = 0 To (frmD.PicBox.Width / Screen.TwipsPerPixelX) Step 10
        'Pixle's Red Value
        texr = frmD.PicBox.Point(X, Y) And 255
        'Pixle's Green Value
        texg = (frmD.PicBox.Point(X, Y) And 65280) / 256
        'Pixle's Blue Value
        texb = (frmD.PicBox.Point(X, Y) And 16711680) / 65535
        'Set Pixle With Burnt Color
        SetPixel frmD.PicBox.hdc, X, Y, Color1.BackColor
    Next X
    Next Y
End Sub

'#################################### FAST GRAPHICS ####################################

Private Sub fastBrightNoise_Click()
On Error Resume Next
    GetObject frmD.PicBox.Image, Len(PicInfo), PicInfo
    BytesPerLine = (PicInfo.bmWidth * 3 + 3) And &HFFFFFFFC
    ReDim PicBits(1 To BytesPerLine * PicInfo.bmHeight * 3) As Byte
    GetBitmapBits frmD.PicBox.Image, UBound(PicBits), PicBits(1)
    For Cnt = 1 To UBound(PicBits)
        PicBits(Cnt) = PicBits(Cnt) + Int(Rnd * 100)
    Next Cnt
    SetBitmapBits frmD.PicBox.Image, UBound(PicBits), PicBits(1)
    frmD.PicBox.Refresh
End Sub
Private Sub fastDarkNoise_Click()
On Error Resume Next
    GetObject frmD.PicBox.Image, Len(PicInfo), PicInfo
    BytesPerLine = (PicInfo.bmWidth * 3 + 3) And &HFFFFFFFC
    ReDim PicBits(1 To BytesPerLine * PicInfo.bmHeight * 3) As Byte
    GetBitmapBits frmD.PicBox.Image, UBound(PicBits), PicBits(1)
    For Cnt = 1 To UBound(PicBits)
        PicBits(Cnt) = PicBits(Cnt) - Int(Rnd * 100)
    Next Cnt
    SetBitmapBits frmD.PicBox.Image, UBound(PicBits), PicBits(1)
    frmD.PicBox.Refresh
End Sub
Private Sub fastBurn_Click()
On Error Resume Next
    GetObject frmD.PicBox.Image, Len(PicInfo), PicInfo
    BytesPerLine = (PicInfo.bmWidth * 3 + 3) And &HFFFFFFFC
    ReDim PicBits(1 To BytesPerLine * PicInfo.bmHeight * 3) As Byte
    GetBitmapBits frmD.PicBox.Image, UBound(PicBits), PicBits(1)
    For Cnt = 1 To UBound(PicBits)
        PicBits(Cnt) = PicBits(Cnt) / 2
    Next Cnt
    SetBitmapBits frmD.PicBox.Image, UBound(PicBits), PicBits(1)
    frmD.PicBox.Refresh
End Sub
Private Sub fastDodge_Click()
On Error Resume Next
    GetObject frmD.PicBox.Image, Len(PicInfo), PicInfo
    BytesPerLine = (PicInfo.bmWidth * 3 + 3) And &HFFFFFFFC
    ReDim PicBits(1 To BytesPerLine * PicInfo.bmHeight * 3) As Byte
    GetBitmapBits frmD.PicBox.Image, UBound(PicBits), PicBits(1)
    For Cnt = 1 To UBound(PicBits)
        PicBits(Cnt) = PicBits(Cnt) * 2
    Next Cnt
    SetBitmapBits frmD.PicBox.Image, UBound(PicBits), PicBits(1)
    frmD.PicBox.Refresh
End Sub








'################################## LOAD / UNLOAD ############################################
'[LOAD]
Private Sub MDIForm_Load() 'MDIForm(frmMain)
a = 0
    'Get The Dimensions Of frmMain
    Me.Left = GetSetting(App.Title, "Settings", "MainLeft", 1000)
    Me.Top = GetSetting(App.Title, "Settings", "MainTop", 1000)
    Me.Width = GetSetting(App.Title, "Settings", "MainWidth", 6500)
    Me.Height = GetSetting(App.Title, "Settings", "MainHeight", 6500)
    LoadNewDoc
End Sub
'[UNLOAD]
Private Sub MDIForm_Unload(Cancel As Integer) 'MDIForm(frmMain)
    If Me.WindowState <> vbMinimized Then
        'Save The Settings Of The Window So It Will Open That Way Next Time
        SaveSetting App.Title, "Settings", "MainLeft", Me.Left
        SaveSetting App.Title, "Settings", "MainTop", Me.Top
        SaveSetting App.Title, "Settings", "MainWidth", Me.Width
        SaveSetting App.Title, "Settings", "MainHeight", Me.Height
    End If
End Sub
'##################################### FILE ##################################################
'[NEW]
Private Sub mnuNew_Click()
    LoadNewDoc
End Sub
Private Sub LoadNewDoc()
a = a + 1
Set frmD = New frmDocument
    frmD.Caption = "Image " & a
    frmD.Show
End Sub
'[OPEN]
Private Sub mnuOpen_Click()
a = a + 1
Set frmD = New frmDocument
frmD.Caption = "Image " & a
frmD.Show
cd1.ShowOpen
frmD.PicBox.Picture = LoadPicture(cd1.FileName)
End Sub
'[SAVE]
Private Sub mnuSave_Click()
    'With cd1 (Common Dialog)
    With cd1
        'Set The Title Of The Save Window To "Choose a filename to save"
        .DialogTitle = "Choose a filename to save"
        'Set The Save Filter Of The Save Window To "24-bit Bitmap (*.bmp)|*.bmp"
        .Filter = "24-bit Bitmap (*.bmp)|*.bmp"
        'Set The Filters Index To 1
        .FilterIndex = 1
        'Set The File Name To "" (Blank)
        .FileName = ""
        'Show The Save Window
        .ShowSave
       
    'If The File Name Is "" (Blank) Then Exit Sub
    If .FileName = "" Then
        Exit Sub
    End If
        'Save Picture PicBox's Image as .FileName
        SavePicture frmDocument.PicBox.Image, .FileName
    'End With cd1 (Common Dialog)
    End With
End Sub
'[PRINT]
Private Sub mnuPrint_Click()
    'Common Dialog Show Print
    cd1.ShowPrinter
End Sub
'[EXIT]
Private Sub mnuExit_Click()
    'End (Exit App)
    End
End Sub

'################################### ARRANGEMENTS ############################################

'[ARRANGE ICONS]
Private Sub mnuArrangeIcons_Click()
    'Arrange The Icons On frmMain
    Me.Arrange vbArrangeIcons
End Sub

'[WINDOW ARRANGEMENTS]

'[HORIZONTAL]
Private Sub mnuHorizontal_Click()
    'Arrange The Windows On frmMain Horizontaly
    Me.Arrange vbTileHorizontal
End Sub
'[VERTICAL]
Private Sub mnuVertical_Click()
    'Arrange The Windows On frmMain Verticaly
    Me.Arrange vbTileVertical
End Sub
'[CASCADE]
Private Sub mnuCascade_Click()
    'Cascade The Windows On frmMain
    Me.Arrange vbCascade
End Sub

'################################### TOOLBAR CASES ###########################################

'[TOOLBAR 1]

Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)

    On Error Resume Next

    'Select Case Button.Key (Tool Bar Button Keys)
    Select Case Button.Key

        '[Baru]
        Case "New"
            LoadNewDoc

        '[SIMPAN]
        Case "Save"
            mnuSave_Click

        '[OPEN]
        Case "Open"
            mnuOpen_Click

        '[PRINT]
        Case "Print"
            mnuPrint_Click

        '[CASCADE]
        Case "Cascade"
            mnuCascade_Click

        '[HORIZONTAL]
        Case "Tile Horizontal"
            mnuHorizontal_Click

        '[VERTICAL]
        Case "Tile Vertical"
            mnuVertical_Click
            
    'End Selection For Button.Key
    End Select
   
End Sub

'[TOOLBAR 2]

Private Sub Toolbar2_ButtonClick(ByVal Button As MSComctlLib.Button)

    On Error Resume Next

    'Select Case Button.Key (Tool Bar Button Keys)
    Select Case Button.Key

        '[PENCIL]

        Case "Pencil"
            'Mouse Pointer Is The Default (Arrow)
            frmD.PicBox.MousePointer = 0
            'Draw Mode = Copy Pen
            PicBox.DrawMode = 13
            'Draw Width = 1
            PicBox.DrawWidth = 1
            'Tool Title = "Pencil"
            DrawType.Caption = "Pencil"
            'Hide Fill Style Options
            xFillStyle.Visible = False
            'Hide Brush Style Options
            BrushStyle.Visible = False
            'Show The Pen Size
            PenSize.Visible = True
            'Disable Pen Size (Draw Width) Options
            PenSize.Enabled = False
            'Hide Labels
            Label4.Visible = True
            Label5.Visible = False
            'Show The Frame
            Frame2.Visible = True
           
        '[PEN]

        Case "Pen"
            'Mouse Pointer Is The Default (Arrow)
            frmD.PicBox.MousePointer = 0
            'Tool Title = "Pen"
            DrawType.Caption = "Pen"
            'Hide Fill Style Options
            xFillStyle.Visible = False
            'Show The Pen Size
            PenSize.Visible = True
            'Enable Pen Size (Draw Width) Options
            PenSize.Enabled = True
            'Show Labels
            Label4.Visible = True
            Label5.Visible = True
            'Show Brush Style Options
            BrushStyle.Visible = True
            'Show The Frame
            Frame2.Visible = True

        '[MARKER]

        Case "Marker"
            'Mouse Pointer Is The Default (Arrow)
            frmD.PicBox.MousePointer = 0
            'Tool Title = "Marker"
            DrawType.Caption = "Marker"
            'Hide Fill Style Options
            FillStyle.Visible = False
            'Show The Pen Size
            PenSize.Visible = True
            'Enable Pen Size (Draw Width) Options
            PenSize.Enabled = True
            'Show Labels
            Label4.Visible = True
            Label5.Visible = True
            'Hide Fill Style Options
            xFillStyle.Visible = False
            'Show Brush Style Options
            BrushStyle.Visible = True
            'Show The Frame
            Frame2.Visible = True
        '[ERASER]

        Case "Eraser"
            'Mouse Pointer Is The Default (Arrow)
            frmD.PicBox.MousePointer = 0
            'Tool Title = "Eraser"
            DrawType.Caption = "Eraser"
            'Hide Fill Style Options
            xFillStyle.Visible = False
            'Show The Pen Size
            PenSize.Visible = True
            'Enable Pen Size (Draw Width) Options
            PenSize.Enabled = True
            'Show / Hide Labels
            Label4.Visible = True
            Label5.Visible = False
            'Hide Brush Style Options
            BrushStyle.Visible = False
            'Show The Frame
            Frame2.Visible = True

        '[COLOR PICKER]

        Case "Color Picker"
            'Mouse Pointer Is A Cross
            frmD.PicBox.MousePointer = 2
            'Tool Title = "Color Picker"
            DrawType.Caption = "Color Picker"
            'Hide The Frame
            Frame2.Visible = False

        '[FLOOD FILL]

        Case "Flood Fill"
            'Mouse Pointer Is The Default (Arrow)
            frmD.PicBox.MousePointer = 0
            'Tool Title = "Flood Fill"
            DrawType.Caption = "Flood Fill"
            'Show Fill Style Options
            xFillStyle.Visible = True
            'Hide The Pen Size
            PenSize.Visible = False
            'Show / Hide Labels
            Label4.Visible = False
            Label5.Visible = True
            'Hide Brush Style Options
            BrushStyle.Visible = False
            'Show The Frame
            Frame2.Visible = True
           
    'End Selection For Button.Key
    End Select
   
End Sub

'#################################### COLOR MIXER ############################################

'[TEXT TO RED VALUE]
Private Sub txtred_Change()

    'Custom Color (ShapeColor.BackColor) = RGB(red.Value + green.Value + blue.Value)
    ShapeColor.BackColor = RGB(red.Value, green.Value, blue.Value)

    On Error Resume Next

    'If Greater Then 255
    If txtred.Text > 255 Then
        MsgBox "Red Value Must Be Between 0 And 255"
        txtred.Text = 255
    End If

    'If Less Then 0
    If txtred.Text < 0 Then
        MsgBox "Red Value Must Be Between 0 And 255"
        txtred.Text = 0
    End If

    'Value = Text
    red.Value = txtred.Text

End Sub
'[TEXT TO GREEN VALUE]
Private Sub txtgreen_Change()

    'Custom Color (ShapeColor.BackColor) = RGB(red.Value + green.Value + blue.Value)
    ShapeColor.BackColor = RGB(red.Value, green.Value, blue.Value)

    On Error Resume Next

    'If Greater Then 255
    If txtgreen.Text > 255 Then
        MsgBox "Green Value Must Be Between 0 And 255"
        txtgreen.Text = 255
    End If

    'If Less Then 0
    If txtgreen.Text < 0 Then
        MsgBox "Green Value Must Be Between 0 And 255"
        txtgreen.Text = 0
    End If

    'Value = Text
    green.Value = txtgreen.Text

End Sub
'[TEXT TO BLUE VALUE]
Private Sub txtblue_Change()

    'Custom Color (ShapeColor.BackColor) = RGB(red.Value + green.Value + blue.Value)
    ShapeColor.BackColor = RGB(red.Value, green.Value, blue.Value)

    On Error Resume Next

    'If Greater Then 255
    If txtblue.Text > 255 Then
        MsgBox "Blue Value Must Be Between 0 And 255"
        txtblue.Text = 255
    End If

    'If Less Then 0
    If txtblue.Text < 0 Then
        MsgBox "Blue Value Must Be Between 0 And 255"
        txtblue.Text = 0
    End If

    'Value = Text
    blue.Value = txtblue.Text

End Sub
'[RED VALUE TO TEXT]
Private Sub red_Change()
    'Custom Color (ShapeColor.BackColor) = RGB(red.Value + green.Value + blue.Value)
    ShapeColor.BackColor = RGB(red.Value, green.Value, blue.Value)
If m1.Value = True Then Color1.BackColor = ShapeColor.BackColor
If m2.Value = True Then Color2.BackColor = ShapeColor.BackColor
    'Text = Value
    txtred.Text = red.Value

End Sub
Private Sub red_Scroll()
    'Custom Color (ShapeColor.BackColor) = RGB(red.Value + green.Value + blue.Value)
    ShapeColor.BackColor = RGB(red.Value, green.Value, blue.Value)
If m1.Value = True Then Color1.BackColor = ShapeColor.BackColor
If m2.Value = True Then Color2.BackColor = ShapeColor.BackColor
    'Text = Value
    txtred.Text = red.Value
End Sub
'[GREEN VALUE TO TEXT]
Private Sub green_Change()
    'Custom Color (ShapeColor.BackColor) = RGB(red.Value + green.Value + blue.Value)
    ShapeColor.BackColor = RGB(red.Value, green.Value, blue.Value)
If m1.Value = True Then Color1.BackColor = ShapeColor.BackColor
If m2.Value = True Then Color2.BackColor = ShapeColor.BackColor
    'Text = Value
    txtgreen.Text = green.Value

End Sub
Private Sub green_Scroll()
    'Custom Color (ShapeColor.BackColor) = RGB(red.Value + green.Value + blue.Value)
    ShapeColor.BackColor = RGB(red.Value, green.Value, blue.Value)
If m1.Value = True Then Color1.BackColor = ShapeColor.BackColor
If m2.Value = True Then Color2.BackColor = ShapeColor.BackColor
    'Text = Value
    txtgreen.Text = green.Value
End Sub
'[BLUE VALUE TO TEXT]
Private Sub blue_Change()
    'Custom Color (ShapeColor.BackColor) = RGB(red.Value + green.Value + blue.Value)
    ShapeColor.BackColor = RGB(red.Value, green.Value, blue.Value)
If m1.Value = True Then Color1.BackColor = ShapeColor.BackColor
If m2.Value = True Then Color2.BackColor = ShapeColor.BackColor
    'Text = Value
    txtblue.Text = blue.Value

End Sub
Private Sub blue_Scroll()
    'Custom Color (ShapeColor.BackColor) = RGB(red.Value + green.Value + blue.Value)
    ShapeColor.BackColor = RGB(red.Value, green.Value, blue.Value)
If m1.Value = True Then Color1.BackColor = ShapeColor.BackColor
If m2.Value = True Then Color2.BackColor = ShapeColor.BackColor
    'Text = Value
    txtblue.Text = blue.Value
End Sub
'[GRADIENT MOUSE DOWN]
Private Sub gradient_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    On Error GoTo 1
   
    'B = Where You Clicked On The Gradient
    'If You Click The Gradient It Gets The Point Where You Clicked Then
    'It Sets The Color You Clicked On The Gradient, To Color1
    b = Gradient.Point(X, Y)
    If Button = 1 And m1.Value = True Then
    Color1.BackColor = b
    End If
    If Button = 2 And m1.Value = True Then
    m1.Value = False
    m2.Value = True
    End If
   
    If Button = 1 And m2.Value = True Then
    m1.Value = True
    m2.Value = False
    End If
    If Button = 2 And m2.Value = True Then
    Color2.BackColor = b
    End If
    '[COLOR TO RGB]
        'Get Red Value
        texr = Gradient.Point(X, Y) And 255
        'Get Green Value
        texg = (Gradient.Point(X, Y) And 65280) / 256
        'Get Blue Value
        texb = (Gradient.Point(X, Y) And 16711680) / 65535
    red.Value = texr
    green.Value = texg
    blue.Value = texb
   
1 End Sub
'[GRADIENT MOUSE MOVE]
Private Sub gradient_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

    On Error GoTo 1

    'B = Where You Clicked On The Gradient
    b = Gradient.Point(X, Y)

    'If Mouse1 and Mouse2 Are Pressed Then Exit Sub
    If Button <> 1 And Button <> 2 Then
        Exit Sub
    End If

    'If Mouse1 Then Set The Color You Clicked On The Gradient, To Color1
    If Button = 1 And m1.Value = True Then
        frmMain.Color1.BackColor = b
        'Get Red Value
        texr = Gradient.Point(X, Y) And 255
        'Get Green Value
        texg = (Gradient.Point(X, Y) And 65280) / 256
        'Get Blue Value
        texb = (Gradient.Point(X, Y) And 16711680) / 65535
        red.Value = texr
        green.Value = texg
        blue.Value = texb
    End If
        'If Mouse2 Then Set The Color You Clicked On The Gradient, To Color2
    If Button = 2 And m1.Value = True Then
        frmMain.Color1.BackColor = b
        'Get Red Value
        texr = Gradient.Point(X, Y) And 255
        'Get Green Value
        texg = (Gradient.Point(X, Y) And 65280) / 256
        'Get Blue Value
        texb = (Gradient.Point(X, Y) And 16711680) / 65535
        red.Value = texr
        green.Value = texg
        blue.Value = texb
    End If
   
    'If Mouse1 Then Set The Color You Clicked On The Gradient, To Color2
    If Button = 1 And m2.Value = True Then
        frmMain.Color2.BackColor = b
        'Get Red Value
        texr = Gradient.Point(X, Y) And 255
        'Get Green Value
        texg = (Gradient.Point(X, Y) And 65280) / 256
        'Get Blue Value
        texb = (Gradient.Point(X, Y) And 16711680) / 65535
        red.Value = texr
        green.Value = texg
        blue.Value = texb
    End If
        'If Mouse2 Then Set The Color You Clicked On The Gradient, To Color2
    If Button = 2 And m2.Value = True Then
        frmMain.Color2.BackColor = b
        'Get Red Value
        texr = Gradient.Point(X, Y) And 255
        'Get Green Value
        texg = (Gradient.Point(X, Y) And 65280) / 256
        'Get Blue Value
        texb = (Gradient.Point(X, Y) And 16711680) / 65535
        red.Value = texr
        green.Value = texg
        blue.Value = texb
    End If
1 End Sub
Private Sub Swatches_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

    On Error GoTo 1
   
    'B = Where You Clicked On The Swatch
    'If You Click The Swatch It Gets The Point Where You Clicked Then
    'It Sets The Color You Clicked On The Swatch, To Color1
   
    b = Swatches.Point(X, Y)
   
    If Button = 1 And m1.Value = True Then
    Color1.BackColor = b
    End If
    If Button = 2 And m1.Value = True Then
    m1.Value = False
    m2.Value = True
    End If
   
    If Button = 1 And m2.Value = True Then
    m1.Value = True
    m2.Value = False
    End If
    If Button = 2 And m2.Value = True Then
    Color2.BackColor = b
    End If
    '[COLOR TO RGB]
        'Get Red Value
        texr = Swatches.Point(X, Y) And 255
        'Get Green Value
        texg = (Swatches.Point(X, Y) And 65280) / 256
        'Get Blue Value
        texb = (Swatches.Point(X, Y) And 16711680) / 65535
    red.Value = texr
    green.Value = texg
    blue.Value = texb
1 End Sub
Private Sub Swatches_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

    On Error GoTo 1

    'B = Where You Clicked On The Gradient
    b = Swatches.Point(X, Y)

    'If Mouse1 and Mouse2 Are Pressed Then Exit Sub
    If Button <> 1 And Button <> 2 Then
        Exit Sub
    End If

    'If Mouse1 Then Set The Color You Clicked On The Gradient, To Color1
    If Button = 1 And m1.Value = True Then
        frmMain.Color1.BackColor = b
        'Get Red Value
        texr = Swatches.Point(X, Y) And 255
        'Get Green Value
        texg = (Swatches.Point(X, Y) And 65280) / 256
        'Get Blue Value
        texb = (Swatches.Point(X, Y) And 16711680) / 65535
        red.Value = texr
        green.Value = texg
        blue.Value = texb
    End If
        'If Mouse2 Then Set The Color You Clicked On The Gradient, To Color2
    If Button = 2 And m1.Value = True Then
        frmMain.Color1.BackColor = b
        'Get Red Value
        texr = Swatches.Point(X, Y) And 255
        'Get Green Value
        texg = (Swatches.Point(X, Y) And 65280) / 256
        'Get Blue Value
        texb = (Swatches.Point(X, Y) And 16711680) / 65535
        red.Value = texr
        green.Value = texg
        blue.Value = texb
    End If
   
    'If Mouse1 Then Set The Color You Clicked On The Gradient, To Color2
    If Button = 1 And m2.Value = True Then
        frmMain.Color2.BackColor = b
        'Get Red Value
        texr = Swatches.Point(X, Y) And 255
        'Get Green Value
        texg = (Swatches.Point(X, Y) And 65280) / 256
        'Get Blue Value
        texb = (Swatches.Point(X, Y) And 16711680) / 65535
        red.Value = texr
        green.Value = texg
        blue.Value = texb
    End If
        'If Mouse2 Then Set The Color You Clicked On The Gradient, To Color2
    If Button = 2 And m2.Value = True Then
        frmMain.Color2.BackColor = b
        'Get Red Value
        texr = Swatches.Point(X, Y) And 255
        'Get Green Value
        texg = (Swatches.Point(X, Y) And 65280) / 256
        'Get Blue Value
        texb = (Swatches.Point(X, Y) And 16711680) / 65535
        red.Value = texr
        green.Value = texg
        blue.Value = texb
    End If
1 End Sub
ABSTRAK

Keamanan telah menjadi aspek yang sangat penting dari suatu sistem informasi. Sebuah informasi umumnya hanya ditujukan bagi segolongan tertentu. Oleh karena itu sangat penting untuk mencegahnya jatuh kepada pihak-pihak lain yang tidak berkepentingan. Penerapan kriptografi dapat digunakan untuk mengamankan data. Oleh karena itu, pengguna basis data membutuhkan bantuan untuk memenuhi kebutuhan keamanan akan data yang disimpannya
 Kriptografi sesungguhnya merupakan studi terhadap teknik matematis yang terkait dengan aspek keamanan suatu sistem informasi, antara lain seperti kerahasiaan, integritas data, otentikasi, dan ketiadaan penyangkalan Perancangan program enkripsi pada login aplikasi program ini menggunakan software visual basic 6.0 dengan memanfaatkan menu *.dll.