Lompat ke isi

Praktik Encrypt & Decrypt data

Dari Wiki Tamansiswa
Revisi sejak 12 Mei 2025 18.08 oleh Admin (bicara | kontrib) (←Membuat halaman berisi '==Tujuan Pembelajaran== * Mahasiswa memahami konsep dasar enkripsi simetris untuk data pribadi. * Mahasiswa mampu mengimplementasikan enkripsi dan dekripsi dalam basis data MySQL. * Mahasiswa mengetahui batasan search dan update terhadap data terenkripsi. ==Contoh Implementasi di MySQL Ubuntu 24.04== '''1. Instalasi MySQL''' sudo apt update sudo apt install mysql-server sudo systemctl start mysql sudo mysql_secure_installation '''2. Persiapan Database'''...')
(beda) ← Revisi sebelumnya | Revisi terkini (beda) | Revisi selanjutnya → (beda)

Tujuan Pembelajaran

  • Mahasiswa memahami konsep dasar enkripsi simetris untuk data pribadi.
  • Mahasiswa mampu mengimplementasikan enkripsi dan dekripsi dalam basis data MySQL.
  • Mahasiswa mengetahui batasan search dan update terhadap data terenkripsi.

Contoh Implementasi di MySQL Ubuntu 24.04

1. Instalasi MySQL

sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo mysql_secure_installation

2. Persiapan Database

Buat database dan tabel:

CREATE DATABASE db_privasi;
USE db_privasi;

CREATE TABLE pengguna (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nama VARBINARY(255),
    email VARBINARY(255)
);

> Catatan: Gunakan `VARBINARY` agar data hasil enkripsi dapat disimpan.

3. Enkripsi dan Dekripsi dengan AES

> Di MySQL, kita bisa menggunakan fungsi `AES_ENCRYPT()` dan `AES_DECRYPT()`.

Contoh: Menyisipkan data terenkripsi

SET @kunci = 'rahasia123';

INSERT INTO pengguna (nama, email)
VALUES (
    AES_ENCRYPT('Dzaq Rayhan', @kunci),
    AES_ENCRYPT('[email protected]', @kunci)
);

4. Melihat Data (Dekripsi saat SELECT)

SELECT 
    id,
    CAST(AES_DECRYPT(nama, @kunci) AS CHAR) AS nama_dekripsi,
    CAST(AES_DECRYPT(email, @kunci) AS CHAR) AS email_dekripsi
FROM pengguna;


5. Search (Pencarian Data Terenkripsi)

Kamu tidak bisa search langsung pakai `LIKE` atau `= 'nama'` pada data terenkripsi. Solusinya:

SELECT * FROM pengguna
WHERE nama = AES_ENCRYPT('Dzaq Rayhan', @kunci);

> Harus mengenkripsi kata kunci pencarian dengan kunci yang sama.

6. Update (Pembaruan Data Terenkripsi)

UPDATE pengguna
SET email = AES_ENCRYPT('[email protected]', @kunci)
WHERE nama = AES_ENCRYPT('Dzaq Rayhan', @kunci);

Catatan Penting

  • Tidak bisa full-text search atau `LIKE '%rayhan%'` pada data terenkripsi.
  • Enkripsi ini bersifat deterministik (hasilnya tetap jika input & kunci sama).
  • Simpan kunci enkripsi di luar MySQL (misalnya: file `.env`, app backend).

Tips Keamanan

  • Gunakan AES-256 jika menggunakan `AES_ENCRYPT(data, key, 'aes-256-cbc')` (jika didukung MySQL 8+).
  • Gunakan prepared statement di aplikasi untuk hindari SQL injection.


Pranala Menarik