Posted by : Rhyf Ahmad Friday, February 08, 2013

Masih ingat dengan postingan saya beberapa bulan yang lalu? Tentang Form Login Visual Basic .Net Menggunakan Database Access? Sekilas form login ini memang cukup aman, namun bagaimana jika ternyata data yang ada di dalam database terbuka? Hal ini akan berakibat fatal bagi si empu software, namun jangan takut, kali ini ane mau ngasih tau cara yang LEBIH AMAN dalam memproteksi user account yang terdapat dalam database dengan menggunakan metode HASH ala SHA1. Penasaran?

Kode-kode ini saya rancang sendiri setelah 15 menit ngutak-ngatik VB .Net, walaupun tidak jauh berbeda dari kode sebelumnya, namun saya yakin kode ini lebih aman ketimbang kode-kode yang diberikan pada postingan sebelumnya. Dan untuk melanjutkan membaca, silahkan agan membuat database terlebih dahulu dengan nama Login.mdb. Format Database Access ini menggunakan format Access 2000-2003, sama seperti database yang digunakan pada postingan sebelumnya. Jika sudah, close terlebih dahulu database yang sudah dibuat tadi. Buka kembali Microsoft Access (Jangan buka databasenya yah gan), lalu tekan kombinasi tombol Ctrl + O pada keyboard, kalo udah, klik satu kali saja pada nama database yang tadi sudah dibuat, lalu klik tanda panah kecil pada Open Button Microsoft Office dan pilih Open Exclusive.
Tambahkan data ini ke dalam tabel Username :
Username   : ae9168852429c4fc73a829dac15f3fb
Password   : 61243c7b9a4022cb3f8dc3106767ed12


Database nantinya bakal nampak tuh gan, lalu di dalam Tab File > Info, pilih Set Database Password, silahkan masukkan password database yang agan kehendaki, terserah deh apa aja. OK. Simpen dulu gan databasenya, jangan ampe dimakan kucing. Kita buka aja dulu tuh aplikasi VB .Netnya, dan buat sebuah form sebagai form login nantinya. Propertynya bisa agan sesuaikan, tapi sebagai standar, silahkan ikuti yang di bawah ini :

Form1
Name        : Login

TextBox1
Name        : txtUser

TextBox2
Name        : txtPass

Button1
Name        : btnLogin
FlatStyle   : Flat
Text        : Login

Button2
Name        : btnCancel
FlatStyle   : Flat
Text        : Cancel

Nanti jadinya kayak gene neh gan :



Simpan dulu yah projectnya, ke direktori yang agan mau. Kalo udah disimpen, masih inget ga tadi nyimpen databasenya di mana? Yah, lupa yah? Padahal tadi saya minta agan naruh database ke dalam direktori (contoh) E:\NamaProject\bin\Debug. Di situ gan naruh databasenya, ntar agan kalo udah ketemu taruh di situ yah.

Update..!!

Silahkan agan buat form2 dengan nama bebas ajah, lalu sisipkan sebuah label di sana, jangan ada yang dirubah ya gan. Ini hanya contoh saja, yang nantinya form2 ini akan muncul jika username dan password ada dalam database.
Lanjut kita ke bagian koding.
Pertama, pada jendela Form1 tadi, tekan F7 untuk melihat kode apa saja yang ada pada tuh form kita, dan di atas kode Public Class Login, ketikkan kode di bawah ini :

    Imports System.Security.Cryptography

Kode di atas bertujuan agar kita bisa memakai fungsi kriptografi yang ada pada system. Selanjutnya, kita buat variabel global untuk form Login, tepatnya dituliskan di bawah kode Public Class Login.

    Dim KNS As New OleDb.OleDbConnection
    Dim DA As New OleDb.OleDbDataAdapter
    Dim DT, DT2 As New DataTable
    Dim SQL, SQL2 As String


Gimana? Udah belon? Lanjut kita akan menuliskan sebuah Function Hash ke dalam form Login tepat di bawah kode di atas.

   Public Function Hash(ByVal password As String) As String
        Dim sha1hash As New SHA1CryptoServiceProvider
        Dim byteH As Byte()
        Dim byteV As Byte()
        byteH = System.Text.Encoding.ASCII.GetBytes(password)
        byteV = sha1hash.ComputeHash(byteH)
        Dim pass As String = ""
        For Each b As Byte In byteH
            pass = b.ToString("x2")
        Next
        Return password
    End Function


Kemudian, ketikkan juga kode di bawah ini :

   Sub Cari()
        DT.Clear()
        Dim user1 As String
        Dim user2 As String
        user1 = TxtPass.Text
        Call Hash(user1)
        user2 = Hash(user1)
        Sql = "SELECT * FROM Username Where username='" & user2 & "'"
        DA.SelectCommand = New OleDb.OleDbCommand(Sql, KNS)
        DA.Fill(DT)
    End Sub
    Sub Cari2()
        DT2.Clear()
        Dim pass1 As String
        Dim pass2 As String
        pass1 = TxtPass.Text
        Call Hash(pass1)
        pass2 = Hash(pass1)
        SQL2 = "SELECT * FROM Username where Password='" & pass2 & "'"
        DA.SelectCommand = New OleDb.OleDbCommand(Sql, KNS)
        DA.Fill(DT2)
    End Sub


Banyak yah gan? Dikit lah segitu sih.Lakukan double klik di sembarang tempat pada form Login, nanti kursor secara otomatis berada pada kode Form On-Load, ketikkan kode di bawah ini yah gan :

       KNS.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;
       DATA SOURCE=" & Application.StartupPath & "\Login.mdb"

Kodenya nyambung tuh gan, jangan dipisah-pisah ye, kalau di dalam postingan ini hanya karena keterbatasan ruang untuk menuliskan kodenya sajah. Dan kode di atas merupakan database yang tidak memiliki password, jika memiliki password, agan make kode di bawah ini gan.

       KNS.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;
       DATA SOURCE=" Application.StartupPath & "\Login.mdb";
       Jet OLEDB:Database Password=passwordnyatarohdisinigan;


Langkah selanjutnya, double klik btnCancel, dan masukkan kode di bawah ini gan :

        If MessageBox.Show("Are U Sure U Want To Exit?"
        "Madriva : Login", MessageBoxButtons.YesNo, 
        MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes
        Then
            Application.Exit()
        End If


Inget gan, tuh kode dari MessageBox.Show ampe DialogResult.Yes, disambung yah, jangan dipisahin,yang selanjutnya, tanda underscore pink ( _ ) menandakan bahwa kode disambung dengan kode yang dibawahnya. Dan inilah kode utama kita kali ini, lakukan double klik pada btnLogin dan masukkan kode di bawah ini :

   On Error Resume Next
        'Pemanggilan Sub
        Cari()
        Cari2()
        Dim pass1 As String
        pass1 = TxtPass.Text
        Dim pass2 As String
        Dim user1 As String
        user1 = TxtUser.Text
        Dim user2 As String

        'Pemanggilan fungsi Hash
        Call Hash(pass1)
        pass2 = Hash(pass1)
        Call Hash(user1)
        user2 = Hash(user1)
        'Jika user ditemukan, maka form2 akan muncul
        If (user2 = (DT.Rows.Count <> 0)) And (pass2 = _
            (DT2.Rows(0)(1))) Then
            If (pass2 = (DT2.Rows.Count <> 0)) Then

                'Form2 akan melakukan penampakan
                Form2.Show()
                'Form Login bersembunyi di semak-semak
                Me.Hide()
                Form2.Label1.Text = "Selamat Datang " & "" & TxtUser.Text
                TxtPass.Clear()
                TxtUser.Clear()
            Else
            'Jika user tidak ditemukan dalam database, maka akan mncul
            'yang kayak beginian
                MessageBox.Show("Anda gagal Login", "Informasi", _
                MessageBoxButtons.OK, MessageBoxIcon.Information)
                TxtPass.Clear()
                TxtUser.Clear()
            End If
        Else
            MessageBox.Show("Anda gagal Login", "Informasi", _
            MessageBoxButtons.OK, MessageBoxIcon.Information)
            TxtPass.Clear()
            TxtUser.Clear()
        End If


Langkah terakhir adalah dengan mendeklarasikan event pada kedua TextBox kita, caranya dengan masuk pada jendela code, dan pilih txtUser pada combobox pertama, dan KeyUp pada combobox kedua.


Ketikkan kode di bawah ini :

        If e.KeyCode = Keys.Enter Then
            btnLogin.PerformClick()
        End If

Lakukan hal yang sama pada txtPass.
Nah, cukup sekian saja panduan dari saiia pada kesempatan kali ini, tinggal sobat Blogger menekan tombol F5 untuk menjalankan program.
Username    : rhyf
Password    : ahmad
Semoga berhasil. :)

{ 4 comments... read them below or Comment }

  1. maaf ,mas... klo variabel user1,pass1, user2,pass2 itu buar apa?? bisa dikasih contohnya gak??trimah kasihhh

    ReplyDelete
  2. maaf mas, user1,pass1 n user2,pass2 itu deklarasi variabel yg dmana ya?? itu didatabasenya ato buat sendiri d form2 nya?? sekalian dikasih contohnya mas...terimah kasihh

    ReplyDelete
  3. user1 merupakan deklarasi dari txtUser.Text
    user2 merupakan deklarasi dari penggunaan fungsi Hash, yang nantinya, fungsi Hash tersebut akan mengkalkulasi nilai dari user1 = txtUser.Text.
    Begitu juga dari pass1, merupkan deklarasi dari txtPass.Text, dan pass2 merupakan deklarasi variabel dari penggunaan fungsi Hash yang akan mengkalkulasi nilai dari pass1 = txtPass.Text.
    user1, user2, pass1 dan pass2 merupakan deklarasi dari komponen yang ada pada form Login, untuk pembuatan database, silahkan agan masuk ke dalam postingan ini Form Login Menggunakan Database Access
    kalau contoh yang dimaksud agan adalah source kodenya, Insya Allah nanti malam akan saya post dan update, sekarang saiianya masih di kantor gan..
    hehehe....

    ReplyDelete
  4. gak bisa di copy paste postinganny.

    ReplyDelete

You can leave a comment to request any article(s), software(s), ebook(s) or report the dead link.
Then I will reply as soon as I can :)

Welcome to My Blog

- Copyright © Madriva -Robotic Notes- Powered by Blogger - Designed by Johanes Djogan -

/* script Youtube Responsive */