Praktik Encrypt & Decrypt data
Berikut adalah **Modul 9: Proteksi Data Pribadi** dengan fokus pada **Enkripsi & Dekripsi Data**, serta bagaimana melakukan **pencarian (search)** dan **pembaruan (update)** data yang terenkripsi di **MySQL pada Ubuntu 24.04**.
---
- 🔐 **Modul 9: Proteksi Data Pribadi**
- 🧭 Subtopik: Enkripsi & Dekripsi Data + Search dan Update
- 🔐 **Modul 9: Proteksi Data Pribadi**
- 🎯 **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**
```bash sudo apt update sudo apt install mysql-server sudo systemctl start mysql sudo mysql_secure_installation ```
---
- 🔧 **2. Persiapan Database**
- Buat database dan tabel:
- 🔧 **2. Persiapan Database**
```sql 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**
```sql SET @kunci = 'rahasia123';
INSERT INTO pengguna (nama, email) VALUES (
AES_ENCRYPT('Dzaq Rayhan', @kunci), AES_ENCRYPT('dzaq@example.com', @kunci)
); ```
---
- 🔍 **4. Melihat Data (Dekripsi saat SELECT)**
```sql 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:
```sql SELECT * FROM pengguna WHERE nama = AES_ENCRYPT('Dzaq Rayhan', @kunci); ```
> Harus **mengenkripsi** kata kunci pencarian dengan kunci yang sama.
---
- ✏️ **6. Update (Pembaruan Data Terenkripsi)**
```sql UPDATE pengguna SET email = AES_ENCRYPT('rayhan@newmail.com', @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.
---
Kalau kamu mau aku buatin contoh integrasi **PHP/Python** untuk enkripsi data langsung dari aplikasi, tinggal bilang ya!