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: | ||
==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) | |||
); | |||
CREATE DATABASE db_privasi; | |||
USE db_privasi; | |||
CREATE TABLE pengguna ( | |||
); | |||
> Catatan: Gunakan `VARBINARY` agar data hasil enkripsi dapat disimpan. | > 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'; | |||
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: | |||
Kamu | |||
SELECT * FROM pengguna | |||
SELECT * FROM pengguna | WHERE nama = AES_ENCRYPT('Dzaq Rayhan', @kunci); | ||
WHERE nama = AES_ENCRYPT('Dzaq Rayhan', @kunci); | |||
> Harus | > Harus '''mengenkripsi''' kata kunci pencarian dengan kunci yang sama. | ||
'''6. Update (Pembaruan Data Terenkripsi)''' | |||
UPDATE pengguna | |||
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== | |||
* '''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== | |||
* [[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.