Difference between revisions of "Praktik Encrypt & Decrypt data"

From OnnoWiki
Jump to navigation Jump 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...")
 
 
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 08: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