Praktik Encrypt & Decrypt data: Difference between revisions

From OnnoCenterWiki
Jump to navigationJump to search
Created page with "Berikut adalah **Modul 9: Proteksi Data Pribadi** dengan fokus pada **Enkripsi & Dekripsi Data**, serta bagaimana melakukan **pencarian (search)** dan **pembaruan (update)** d..."
 
No edit summary
 
Line 1: Line 1:
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**.
==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==


## 🔐 **Modul 9: Proteksi Data Pribadi**
'''1. Instalasi MySQL'''
### 🧭 Subtopik: Enkripsi & Dekripsi Data + Search dan Update


### 🎯 **Tujuan Pembelajaran**
sudo apt update
- Mahasiswa memahami konsep dasar enkripsi simetris untuk data pribadi.
sudo apt install mysql-server
- Mahasiswa mampu mengimplementasikan enkripsi dan dekripsi dalam basis data MySQL.
sudo systemctl start mysql
- Mahasiswa mengetahui batasan search dan update terhadap data terenkripsi.
sudo mysql_secure_installation


---
'''2. Persiapan Database'''


## 🛠️ **Contoh Implementasi di MySQL Ubuntu 24.04**
Buat database dan tabel:


### ✅ **1. Instalasi MySQL**
CREATE DATABASE db_privasi;
```bash
USE db_privasi;
sudo apt update
sudo apt install mysql-server
CREATE TABLE pengguna (
sudo systemctl start mysql
    id INT AUTO_INCREMENT PRIMARY KEY,
sudo mysql_secure_installation
    nama VARBINARY(255),
```
    email VARBINARY(255)
 
);
---
 
## 🔧 **2. Persiapan Database**
### 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.
> Catatan: Gunakan `VARBINARY` agar data hasil enkripsi dapat disimpan.


---
'''3. Enkripsi dan Dekripsi dengan AES'''


## 🛡️ **3. Enkripsi dan Dekripsi dengan AES**
> Di MySQL, kita bisa menggunakan fungsi `AES_ENCRYPT()` dan `AES_DECRYPT()`.


> Di MySQL, kita bisa menggunakan fungsi `AES_ENCRYPT()` dan `AES_DECRYPT()`.
'''Contoh: Menyisipkan data terenkripsi'''


**Contoh: Menyisipkan data terenkripsi**
SET @kunci = 'rahasia123';
```sql
SET @kunci = 'rahasia123';
INSERT INTO pengguna (nama, email)
VALUES (
    AES_ENCRYPT('Dzaq Rayhan', @kunci),
    AES_ENCRYPT('dzaq@example.com', @kunci)
);


INSERT INTO pengguna (nama, email)
'''4. Melihat Data (Dekripsi saat SELECT)'''
VALUES (
    AES_ENCRYPT('Dzaq Rayhan', @kunci),
    AES_ENCRYPT('dzaq@example.com', @kunci)
);
```


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


### 🔍 **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)'''


### 🔍 **5. Search (Pencarian Data Terenkripsi)**
Kamu '''tidak bisa''' search langsung pakai `LIKE` atau `= 'nama'` pada data terenkripsi. Solusinya:
Kamu **tidak bisa** search langsung pakai `LIKE` atau `= 'nama'` pada data terenkripsi. Solusinya:


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


> Harus **mengenkripsi** kata kunci pencarian dengan kunci yang sama.
> Harus '''mengenkripsi''' kata kunci pencarian dengan kunci yang sama.


---
'''6. Update (Pembaruan Data Terenkripsi)'''


### ✏️ **6. Update (Pembaruan Data Terenkripsi)**
UPDATE pengguna
```sql
SET email = AES_ENCRYPT('rayhan@newmail.com', @kunci)
UPDATE pengguna
WHERE nama = AES_ENCRYPT('Dzaq Rayhan', @kunci);
SET email = AES_ENCRYPT('rayhan@newmail.com', @kunci)
WHERE nama = AES_ENCRYPT('Dzaq Rayhan', @kunci);
```


---
==Catatan Penting==


## ⚠️ **Catatan Penting**
* '''Tidak bisa full-text search''' atau `LIKE '%rayhan%'` pada data terenkripsi.
- **Tidak bisa full-text search** atau `LIKE '%rayhan%'` pada data terenkripsi.
* Enkripsi ini bersifat '''deterministik''' (hasilnya tetap jika input & kunci sama).
- Enkripsi ini bersifat **deterministik** (hasilnya tetap jika input & kunci sama).
* Simpan kunci enkripsi di luar MySQL (misalnya: file `.env`, app backend).
- 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.


## 💡 **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==


Kalau kamu mau aku buatin contoh integrasi **PHP/Python** untuk enkripsi data langsung dari aplikasi, tinggal bilang ya!
* [[Database: Kuliah]]

Latest revision as of 01:28, 21 April 2025

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('dzaq@example.com', @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('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.


Pranala Menarik