Skip to main content

Enkripsi dan Dekripsi Data Dengan VBA Access

Sebagai sarana untuk menyimpan data, aplikasi database semacam Access tentu harus bisa melindungi pengguna dari penyalahgunaan data. Salah satu cara yang digunakan untuk melindungi data adalah dengan melakukan enkripsi.


Enkripsi adalah proses penyamaran data supaya orang lain tidak bisa membaca atau memahami data yang dimaksud, dan hanya orang-orang tertentu saja yang bisa membaca atau memahami data itu. Salah satu contoh adalah penyimpanan data password atau kata sandi. Semua pengguna yang melek teknologi pasti paham apa itu password. Password biasa digunakan untuk melakukan otorisasi masuk ke dalam suatu lingkungan/sistem. Nah, siapa yang melakukan otorisasi? Tentu saja pengguna yang telah terdaftar di lingkungan atau sistem itu. Pengguna yang terdaftar di dalam lingkungan atau sistem mempunyai semacam identitas yang unik, misalnya nama login, alamat email, nomor urut, nomor induk pegawai, nomor seluler, dan sebagainya.Setelah memasukkan identitas, supaya bisa masuk ke dalam lingkungan atau sistem, pengguna harus memasukkan password. Bila password terverifikasi, maka pengguna bisa masuk. Bila tidak, maka pengguna akan ditolak. Demikian logikanya.

Agar password terlindungi dan aman dari pihak yang tidak berkepentingan, kita bisa melakukan enkripsi pada password ini. Caranya, dengan menyamarkan password dengan kode yang tidak mudah dipahami. Selain password, data lain yang mungkin dipandang penting dan rahasia dapat juga dienkripsi. Artinya, bila suatu tabel berisi data sensitif dan rahasia, misalnya NPWP, NIK KTP, gaji, dan sebagainya, kita bisa saja melakukan enkripsi atas data ini. Dengan demikian, data dalam tabel menjadi aman.

Ada banyak sekali cara melakukan enkripsi data, seperti menggunakan MD5, SH1. SH256, dan membuat enkripsi sendiri. Salah satu cara untuk melakukan enkripsi adalah dengan menggunakan Data Encryption Standard (DES). DES banyak digunakan oleh praktisi programmer, karena sifatnya yang mudah dibuat dan bisa diatur sesuai dengan keinginan kita.

Berikut ini adalah kode VBA dari DES yang diperoleh dari https://gist.github.com/motoraku/97ad730891e59159d86c:
Option Explicit

Public Const INITIALIZATION_VECTOR = "12345678"  'Always 8 characters
Public Const TRIPLE_DES_KEY = "abcdefghijklmnop" 'Always 16 characters
'**************************************************************************
'**************************************************************************
'https://gist.github.com/motoraku/97ad730891e59159d86c
'**************************************************************************
'**************************************************************************

Sub TestEncrypt()
    MsgBox "This is an encrypted string: -> " & EncryptStringTripleDES("This is an encrypted string:")
    Debug.Print EncryptStringTripleDES("This is an encrypted string:")
End Sub

Sub TestDecrypt()
    MsgBox "u99CVItCGiMQEVYHf8+S22QbJ5CPQGDXuS5n1jvEIgU= -> " & DecryptStringTripleDES("u99CVItCGiMQEVYHf8+S22QbJ5CPQGDXuS5n1jvEIgU=")
End Sub


Function EncryptStringTripleDES(plain_string As String) As Variant

    Dim encryption_object As Object
    Dim plain_byte_data() As Byte
    Dim encrypted_byte_data() As Byte
    Dim encrypted_base64_string As String

    EncryptStringTripleDES = Null

    On Error GoTo FunctionError

    plain_byte_data = CreateObject("System.Text.UTF8Encoding").GetBytes_4(plain_string)

    Set encryption_object = CreateObject("System.Security.Cryptography.TripleDESCryptoServiceProvider")
    encryption_object.Padding = 3
    encryption_object.Key = CreateObject("System.Text.UTF8Encoding").GetBytes_4(TRIPLE_DES_KEY)
    encryption_object.IV = CreateObject("System.Text.UTF8Encoding").GetBytes_4(INITIALIZATION_VECTOR)
    encrypted_byte_data = _
            encryption_object.CreateEncryptor().TransformFinalBlock(plain_byte_data, 0, UBound(plain_byte_data) + 1)

    encrypted_base64_string = BytesToBase64(encrypted_byte_data)

    EncryptStringTripleDES = encrypted_base64_string

    Exit Function

FunctionError:

    MsgBox "TripleDES encryption failed"

End Function

Function DecryptStringTripleDES(encrypted_string As String) As Variant

    Dim encryption_object As Object
    Dim encrypted_byte_data() As Byte
    Dim plain_byte_data() As Byte
    Dim plain_string As String

    DecryptStringTripleDES = Null

    On Error GoTo FunctionError

    encrypted_byte_data = Base64toBytes(encrypted_string)

    Set encryption_object = CreateObject("System.Security.Cryptography.TripleDESCryptoServiceProvider")
    encryption_object.Padding = 3
    encryption_object.Key = CreateObject("System.Text.UTF8Encoding").GetBytes_4(TRIPLE_DES_KEY)
    encryption_object.IV = CreateObject("System.Text.UTF8Encoding").GetBytes_4(INITIALIZATION_VECTOR)
    plain_byte_data = encryption_object.CreateDecryptor().TransformFinalBlock(encrypted_byte_data, 0, UBound(encrypted_byte_data) + 1)

    plain_string = CreateObject("System.Text.UTF8Encoding").GetString(plain_byte_data)

    DecryptStringTripleDES = plain_string

    Exit Function

FunctionError:

    MsgBox "TripleDES decryption failed"

End Function


Function BytesToBase64(varBytes() As Byte) As String
    With CreateObject("MSXML2.DomDocument").createElement("b64")
        .DataType = "bin.base64"
        .nodeTypedValue = varBytes
        BytesToBase64 = Replace(.Text, vbLf, "")
    End With
End Function


Function Base64toBytes(varStr As String) As Byte()
    With CreateObject("MSXML2.DOMDocument").createElement("b64")
         .DataType = "bin.base64"
         .Text = varStr
         Base64toBytes = .nodeTypedValue
    End With
End Function
'**************************************************************************
'**************************************************************************
'**************************************************************************

Satu keunggulan kode enkripsi DES di atas, dibandingkan dengan cara seperti MD5, SH1, dll, adalah adanya konstanta INITIALIZATION_VECTOR dan TRIPLE_DES_KEY. Dua konstanta ini memungkinkan kita untuk mengatur sendiri nilai yang ingin disamarkan. Selain itu ada pengaturan lain yang bisa disesuaikan, tinggal kita atur saja mana yang paling pas.

Berikut ini adalah contoh aplikasi di Immediate Window.
?EncryptStringTripleDES("tes")
zK4kzizd9qA=
Bila kode ekripsi di atas didekripsikan, hasilnya akan kembali seperti semula.
?DecryptStringTripleDES("zK4kzizd9qA=")
tes

Nah, dengan menggunakan fungsi EncryptStringTripleDES, kita bisa menyimpan data di tabel dalam bentuk enkripsi data, sehingga datanya aman dari gangguan pihak-pihak yang tidak berkepentingan. Untuk membaca kode enkripsi itu, kita harus menggunakan fungsi DecryptStringTripleDES pada nilai data yang diingkan, yaitu saat data ingin ditampilkan di form atau report di Access.

Comments

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Fungsi Untuk Menghitung Pajak Penghasilan PPh 21 di MS Access

Format Untuk Field Dengan Tipe Data Number dan Currency di MS Access