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