Difference between revisions of "Praktik Encrypt & Decrypt data"
Jump to navigation
Jump to search
Onnowpurbo (talk | contribs) (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...") |
Onnowpurbo (talk | contribs) |
||
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 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.