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.