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:
  1. Option Explicit  
  2.   
  3. Public Const INITIALIZATION_VECTOR = "12345678"  'Always 8 characters  
  4. Public Const TRIPLE_DES_KEY = "abcdefghijklmnop" 'Always 16 characters  
  5. '**************************************************************************  
  6. '**************************************************************************  
  7. 'https://gist.github.com/motoraku/97ad730891e59159d86c  
  8. '**************************************************************************  
  9. '**************************************************************************  
  10.   
  11. Sub TestEncrypt()  
  12.     MsgBox "This is an encrypted string: -> " & EncryptStringTripleDES("This is an encrypted string:")  
  13.     Debug.Print EncryptStringTripleDES("This is an encrypted string:")  
  14. End Sub  
  15.   
  16. Sub TestDecrypt()  
  17.     MsgBox "u99CVItCGiMQEVYHf8+S22QbJ5CPQGDXuS5n1jvEIgU= -> " & DecryptStringTripleDES("u99CVItCGiMQEVYHf8+S22QbJ5CPQGDXuS5n1jvEIgU=")  
  18. End Sub  
  19.   
  20.   
  21. Function EncryptStringTripleDES(plain_string As StringAs Variant  
  22.   
  23.     Dim encryption_object As Object  
  24.     Dim plain_byte_data() As Byte  
  25.     Dim encrypted_byte_data() As Byte  
  26.     Dim encrypted_base64_string As String  
  27.   
  28.     EncryptStringTripleDES = Null  
  29.   
  30.     On Error GoTo FunctionError  
  31.   
  32.     plain_byte_data = CreateObject("System.Text.UTF8Encoding").GetBytes_4(plain_string)  
  33.   
  34.     Set encryption_object = CreateObject("System.Security.Cryptography.TripleDESCryptoServiceProvider")  
  35.     encryption_object.Padding = 3  
  36.     encryption_object.Key = CreateObject("System.Text.UTF8Encoding").GetBytes_4(TRIPLE_DES_KEY)  
  37.     encryption_object.IV = CreateObject("System.Text.UTF8Encoding").GetBytes_4(INITIALIZATION_VECTOR)  
  38.     encrypted_byte_data = _  
  39.             encryption_object.CreateEncryptor().TransformFinalBlock(plain_byte_data, 0, UBound(plain_byte_data) + 1)  
  40.   
  41.     encrypted_base64_string = BytesToBase64(encrypted_byte_data)  
  42.   
  43.     EncryptStringTripleDES = encrypted_base64_string  
  44.   
  45.     Exit Function  
  46.   
  47. FunctionError:  
  48.   
  49.     MsgBox "TripleDES encryption failed"  
  50.   
  51. End Function  
  52.   
  53. Function DecryptStringTripleDES(encrypted_string As StringAs Variant  
  54.   
  55.     Dim encryption_object As Object  
  56.     Dim encrypted_byte_data() As Byte  
  57.     Dim plain_byte_data() As Byte  
  58.     Dim plain_string As String  
  59.   
  60.     DecryptStringTripleDES = Null  
  61.   
  62.     On Error GoTo FunctionError  
  63.   
  64.     encrypted_byte_data = Base64toBytes(encrypted_string)  
  65.   
  66.     Set encryption_object = CreateObject("System.Security.Cryptography.TripleDESCryptoServiceProvider")  
  67.     encryption_object.Padding = 3  
  68.     encryption_object.Key = CreateObject("System.Text.UTF8Encoding").GetBytes_4(TRIPLE_DES_KEY)  
  69.     encryption_object.IV = CreateObject("System.Text.UTF8Encoding").GetBytes_4(INITIALIZATION_VECTOR)  
  70.     plain_byte_data = encryption_object.CreateDecryptor().TransformFinalBlock(encrypted_byte_data, 0, UBound(encrypted_byte_data) + 1)  
  71.   
  72.     plain_string = CreateObject("System.Text.UTF8Encoding").GetString(plain_byte_data)  
  73.   
  74.     DecryptStringTripleDES = plain_string  
  75.   
  76.     Exit Function  
  77.   
  78. FunctionError:  
  79.   
  80.     MsgBox "TripleDES decryption failed"  
  81.   
  82. End Function  
  83.   
  84.   
  85. Function BytesToBase64(varBytes() As ByteAs String  
  86.     With CreateObject("MSXML2.DomDocument").createElement("b64")  
  87.         .DataType = "bin.base64"  
  88.         .nodeTypedValue = varBytes  
  89.         BytesToBase64 = Replace(.Text, vbLf, "")  
  90.     End With  
  91. End Function  
  92.   
  93.   
  94. Function Base64toBytes(varStr As StringAs Byte()  
  95.     With CreateObject("MSXML2.DOMDocument").createElement("b64")  
  96.          .DataType = "bin.base64"  
  97.          .Text = varStr  
  98.          Base64toBytes = .nodeTypedValue  
  99.     End With  
  100. End Function  
  101. '**************************************************************************  
  102. '**************************************************************************  
  103. '**************************************************************************  

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.
  1. ?EncryptStringTripleDES("tes")  
  2. zK4kzizd9qA=  
Bila kode ekripsi di atas didekripsikan, hasilnya akan kembali seperti semula.
  1. ?DecryptStringTripleDES("zK4kzizd9qA=")  
  2. 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

Cara Mengatur dan Menggunakan ODBC untuk Mengakses Data Eksternal

Fungsi Untuk Membuka Database di Access VBA

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