Skip to content

Commit eb6ce99

Browse files
author
ANDRI
authored
Merge pull request #1 from pwnosec/data_security_project
build(data-security)dev
2 parents c6fb765 + ce71d50 commit eb6ce99

14 files changed

+225
-2
lines changed

README.md

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,47 @@
1-
# data_security_project
2-
Proyek ini bertujuan untuk mengimplementasikan sistem proteksi keamanan siber dengan fitur-fitur seperti enkripsi data, autentikasi pengguna, autentikasi multi-faktor (MFA), dan logging aktivitas.
1+
# Proyek Data Security 🚀
2+
3+
## Deskripsi
4+
Selamat datang di proyek **Data Security**! 🔒 Proyek ini dibuat untuk melindungi data-data sensitif dan memastikan keamanan siber yang lebih canggih. Dengan fitur-fitur keren seperti enkripsi data, autentikasi pengguna, dan autentikasi multi-faktor (MFA), kamu bisa tenang deh karena data kamu aman banget! Hanya pengguna yang terautentikasi yang bisa mengakses informasi penting ini. Yuk, kita jaga data kita bersama-sama!
5+
6+
## Cara Instalasi
7+
8+
1. **Clone Repo Ini**
9+
Pertama-tama, clone repo ini ke komputer kamu:
10+
```bash
11+
git clone https://github.com/username/data_security_project.git
12+
cd data_security_project
13+
```
14+
2. **Instal Dependensi**
15+
Instal semua dependensi yang diperlukan dengan pip:
16+
```
17+
pip install -r requirements.txt
18+
```
19+
3. **Siapkan Data Pengguna**
20+
Edit file `data/users.csv` dengan username dan password yang di-hash. Gunakan bcrypt untuk meng-hash password, seperti contoh di bawah ini:
21+
```
22+
import bcrypt
23+
24+
password = "password1"
25+
hashed = bcrypt.hashpw(password.encode(), bcrypt.gensalt())
26+
print(hashed.decode())
27+
```
28+
## Cara Penggunaan
29+
1. **Jalankan Proyek**
30+
Setelah semua siap, kamu bisa menjalankan proyek dengan perintah berikut:
31+
```
32+
python src/main.py
33+
```
34+
2. **Jalankan Pengujian**
35+
Untuk menjalankan pengujian, gunakan perintah berikut:
36+
```
37+
python -m unittest tests/test_encryption.py
38+
python -m unittest tests/test_authentication.py
39+
python -m unittest tests/test_logger.py
40+
python -m unittest tests/test_mfa.py
41+
python -m unittest tests/test_database.py
42+
```
43+
44+
### Kontribusi
45+
Kalau kamu mau ikut berkontribusi di proyek ini, silakan buka issue atau pull request! Semua kontribusi sangat dihargai. Semangat!
46+
47+
© [@pwnosec](https://github.com/pwnosec) / [@pwnlaboratory](https://github.com/pwnlaboratory) / [@pwnacademy](https://academy.pwn0sec.com)

data/users.csv

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
username,password
2+
user1,$2b$12$QhZyX3G7k7K0RzAa5HkI7O3ZPaGBnD1G2.YzHR9Q.8N0OhM76Mc1a

requirements.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
cryptography
2+
bcrypt
3+
pandas

src/authentication.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import bcrypt
2+
import pandas as pd
3+
4+
def load_users():
5+
"""Memuat pengguna dari file CSV."""
6+
return pd.read_csv("data/users.csv", index_col=0).to_dict(orient="index")
7+
8+
def authenticate_user(username, password, users_db):
9+
"""Mengautentikasi pengguna dengan username dan password."""
10+
if username in users_db:
11+
hashed_password = users_db[username]["password"].encode()
12+
return bcrypt.checkpw(password.encode(), hashed_password)
13+
return False

src/database.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import pandas as pd
2+
3+
def load_users():
4+
"""Memuat pengguna dari file CSV."""
5+
return pd.read_csv("data/users.csv", index_col=0).to_dict(orient="index")

src/encryption.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from cryptography.fernet import Fernet
2+
3+
# Menghasilkan kunci untuk enkripsi
4+
key = Fernet.generate_key()
5+
cipher = Fernet(key)
6+
7+
def encrypt(data):
8+
"""Enkripsi data yang diberikan."""
9+
return cipher.encrypt(data.encode())
10+
11+
def decrypt(encrypted_data):
12+
"""Dekripsi data terenkripsi yang diberikan."""
13+
return cipher.decrypt(encrypted_data).decode()

src/logger.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import logging
2+
3+
class Logger:
4+
def __init__(self, filename):
5+
logging.basicConfig(filename=filename, level=logging.INFO)
6+
7+
def log(self, message):
8+
logging.info(message)
9+
print(message) # Menampilkan pesan log di konsol

src/main.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from encryption import encrypt, decrypt
2+
from authentication import authenticate_user
3+
from logger import Logger
4+
from mfa import send_mfa_code, verify_mfa_code
5+
from database import load_users
6+
7+
def main():
8+
logger = Logger("activity.log")
9+
users_db = load_users()
10+
11+
username = input("Masukkan username: ")
12+
password = input("Masukkan password: ")
13+
14+
if authenticate_user(username, password, users_db):
15+
logger.log(f"Pengguna {username} berhasil diautentikasi.")
16+
17+
# Mengirim kode MFA
18+
mfa_code = send_mfa_code(username)
19+
mfa_input = input("Masukkan kode MFA yang telah dikirim: ")
20+
21+
if verify_mfa_code(mfa_code, mfa_input):
22+
logger.log(f"MFA berhasil untuk pengguna {username}.")
23+
24+
# Enkripsi dan dekripsi data
25+
data = "Data sensitif yang perlu dilindungi."
26+
encrypted_data = encrypt(data)
27+
logger.log(f"Data terenkripsi: {encrypted_data}")
28+
29+
decrypted_data = decrypt(encrypted_data)
30+
logger.log(f"Data terdekripsi: {decrypted_data}")
31+
else:
32+
logger.log(f"Verifikasi MFA gagal untuk pengguna {username}.")
33+
else:
34+
logger.log(f"Autentikasi gagal untuk pengguna {username}.")
35+
36+
if __name__ == "__main__":
37+
main()

src/mfa.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import random
2+
import smtplib
3+
from email.mime.text import MIMEText
4+
5+
# Simulasi pengiriman kode MFA
6+
def send_mfa_code(username):
7+
mfa_code = str(random.randint(100000, 999999))
8+
send_email(username, mfa_code) # Kirim kode ke email
9+
return mfa_code
10+
11+
def send_email(to_email, mfa_code):
12+
"""Mengirim kode MFA ke email pengguna."""
13+
msg = MIMEText(f"Kode MFA Anda adalah: {mfa_code}")
14+
msg['Subject'] = 'Kode MFA Anda'
15+
msg['From'] = 'smtptest@pwn0sec.com'
16+
msg['To'] = to_email
17+
18+
# Mengirim email menggunakan SMTP
19+
with smtplib.SMTP('smtp.pwn0sec.com', 587) as server:
20+
server.starttls()
21+
server.login('smtptest@pwn0sec.com', 'your_password')
22+
server.send_message(msg)
23+
24+
def verify_mfa_code(expected_code, input_code):
25+
"""Memverifikasi kode MFA."""
26+
return expected_code == input_code

tests/test_authentication.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import unittest
2+
from authentication import load_users, authenticate_user
3+
4+
class TestAuthentication(unittest.TestCase):
5+
6+
def setUp(self):
7+
self.users_db = load_users()
8+
9+
def test_authenticate_user_success(self):
10+
self.assertTrue(authenticate_user("user1", "password1", self.users_db))
11+
12+
def test_authenticate_user_failure(self):
13+
self.assertFalse(authenticate_user("user1", "wrong_password", self.users_db))
14+
15+
if __name__ == "__main__":
16+
unittest.main()

tests/test_database.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import unittest
2+
from database import load_users
3+
4+
class TestDatabase(unittest.TestCase):
5+
6+
def test_load_users(self):
7+
users_db = load_users()
8+
self.assertIn("user1", users_db)
9+
10+
if __name__ == "__main__":
11+
unittest.main()

tests/test_encryption.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import unittest
2+
from encryption import encrypt, decrypt
3+
4+
class TestEncryption(unittest.TestCase):
5+
6+
def test_encryption_decryption(self):
7+
data = "Data sensitif"
8+
encrypted_data = encrypt(data)
9+
decrypted_data = decrypt(encrypted_data)
10+
self.assertEqual(data, decrypted_data)
11+
12+
if __name__ == "__main__":
13+
unittest.main()

tests/test_logger.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import unittest
2+
import os
3+
from logger import Logger
4+
5+
class TestLogger(unittest.TestCase):
6+
7+
def test_log_message(self):
8+
log_file = "test.log"
9+
logger = Logger(log_file)
10+
logger.log("Test log message")
11+
12+
# Memeriksa apakah file log terbentuk
13+
self.assertTrue(os.path.exists(log_file))
14+
15+
# Bersihkan setelah tes
16+
os.remove(log_file)
17+
18+
if __name__ == "__main__":
19+
unittest.main()

tests/test_mfa.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import unittest
2+
from mfa import send_mfa_code, verify_mfa_code
3+
4+
class TestMFA(unittest.TestCase):
5+
6+
def test_verify_mfa_code(self):
7+
mfa_code = send_mfa_code("user1@example.com")
8+
self.assertTrue(verify_mfa_code(mfa_code, mfa_code))
9+
10+
if __name__ == "__main__":
11+
unittest.main()

0 commit comments

Comments
 (0)