Praktik Encrypt & Decrypt data

From OnnoWiki
Jump to navigation Jump to search

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**.

---

    1. 🔐 **Modul 9: Proteksi Data Pribadi**
      1. 🧭 Subtopik: Enkripsi & Dekripsi Data + Search dan Update
      1. 🎯 **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.

---

    1. 🛠️ **Contoh Implementasi di MySQL Ubuntu 24.04**
      1. ✅ **1. Instalasi MySQL**

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

---

    1. 🔧 **2. Persiapan Database**
      1. Buat database dan tabel:

```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.

---

    1. 🛡️ **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)

); ```

---

      1. 🔍 **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; ```

---

      1. 🔍 **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.

---

      1. ✏️ **6. Update (Pembaruan Data Terenkripsi)**

```sql UPDATE pengguna SET email = AES_ENCRYPT('rayhan@newmail.com', @kunci) WHERE nama = AES_ENCRYPT('Dzaq Rayhan', @kunci); ```

---

    1. ⚠️ **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).

---

    1. 💡 **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!