1/04/2013

Tips Visual Basic - Enkripsi / Dekripsi (Penyandian) Password dan Teks


Dalam tips VB kali ini, kita akan mencoba menyandikan teks atau password. Penyandian sangat diperlukan, agar setiap kata-kata yang rahasia yang tidak boleh diketahui oleh orang lain bisa dengan aman disimpan baik didalam program EXE ataupun dalam file lain. Jadi kalau ada yang coba-coba membongkar file EXE atau file penting lainnya yang telah disandikan, maka orang tersebut tidak akan dengan mudah mendapatkan teks aslinya. Kecuali kalau ia memang seorang hacker yang sangat tangguh.

Banyak teknik penyandian (enkripsi) yang telah dikembangkan saat ini, mulai dari yang sangat sederhana sampai pada yang amat kompleks dan aman. Dalam tips kali ini diberikan sebuah teknik sederhana namun kiranya sudah cukup aman untuk sebuah program kecil-kecilan. Teknik ini adalah kreasi dari John Clark Craig, bersumber dari bukunya yang berjudul Microsoft Visual Basic 4.0 Developer's Workshop Edisi Ketiga. Enkripsi ini adalah simetris, artinya teks yang telah dienkripsi bisa dikembalikan ke teks asalnya (dekripsi).

Berikut ini adalah kodenya (beberapa kodenya telah saya rubah sedikit untuk penyesuaian):

Function Cipher(TXT As String, Optional A As Integer, Optional B As Integer, Optional RV As Integer)
    Static R As Long
    Static M As Long
    Static N As Long
    Const BN As Long = 32768
    Dim I As Integer, C As Integer, D As Integer
    If IsMissing(RV) = False Then R = RV
    If IsMissing(A) Then
        If M = 0 Then M = 69
    Else
        M = (A * 4 + 1) Mod BN
    End If
    If IsMissing(B) Then
        If N = 0 Then N = 47
    Else
        N = (B * 2 + 1) Mod BN
    End If
    'proses setiap karakter
    For I = 1 To Len(TXT)
        C = Asc(Mid$(TXT, I, 1))
        'modifikasi khusus teks yg bisa dibaca saja
        Select Case C
        Case 48 To 57
            D = C - 48
        Case 63 To 90
            D = C - 53
        Case 97 To 122
            D = C - 59
        Case Else
            D = -1
        End Select
        If D >= 0 Then
            R = (R * M + N) Mod BN
            D = (R And 63) Xor D
            Select Case D
            Case 0 To 9
                C = D + 48
            Case 10 To 37
                C = D + 53
            Case 38 To 63
                C = D + 59
            End Select
            Mid$(TXT, I, 1) = Chr$(C)
        End If
    Next I
    Cipher = TXT
End Function

Perhatikan teks berwarna merah di atas (parameternya), TXT adalah teks yang akan dienkripsi/dekripsi. Sedangkan nilai A, B, dan RV bisa anda ganti-ganti. Setiap perubahan nilai A,B atau RV akan menghasilkan teks hasil enkripsi yang berbeda. Jadi anda bisa mengkombinasikannya.

Karena enkripsi ini adalah simetris, maka jika teks hasil enkripsi anda masukkan kembali ke fungsi di atas, akan menghasilkan teks aslinya kembali (tentunya menggunakan nilai A, B, dan RV yang sama dengan saat mengenkripsi).

Contoh menggunakan fungsi di atas adalah seperti berikut:

txtHasilEnkripsi.Text = Cipher(txtSumber.Text, 4, 6, 9)
txtHasilDekripsi.Text = Cipher(txtHasilEnkripsi.Text, 4, 6, 9)

Kalau sobat mau melihat file source kode beserta contohnya, bisa didownload disini. Source kode tersebut bila dijalankan, tampilannya adalah seperti pada gambar di atas.