Adaptasi Vault Dokumen ke Backend FastAPI v5 ???
🔐 Vault Terenkripsi AES-256
📋 Panduan Ringkas
- 🔹 Langkah 1: Buat folder proyek dan install dependensi
mkdir vault_project && cd vault_project python -m venv env source env/bin/activate # Linux/macOS env\Scripts\activate # Windows pip install fastapi[all] pycryptodome
- 🔹 Langkah 2: Buat
main.py
dengan isi seperti berikut:from fastapi import FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware from pydantic import BaseModel from Crypto.Cipher import AES from Crypto.Random import get_random_bytes from base64 import b64encode, b64decode import hashlib app = FastAPI() app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"], ) class VaultRequest(BaseModel): text: str password: str class DecryptRequest(BaseModel): encrypted: str password: str def pad(data: str) -> bytes: pad_len = 16 - len(data.encode() % 16) return data.encode() + bytes([pad_len] * pad_len) def unpad(data: bytes) -> str: pad_len = data[-1] return data[:-pad_len].decode() @app.post("/encrypt") def encrypt(data: VaultRequest): key = hashlib.sha256(data.password.encode()).digest() iv = get_random_bytes(16) cipher = AES.new(key, AES.MODE_CBC, iv) ciphertext = cipher.encrypt(pad(data.text)) return {"encrypted": b64encode(iv + ciphertext).decode()} @app.post("/decrypt") def decrypt(data: DecryptRequest): try: key = hashlib.sha256(data.password.encode()).digest() raw = b64decode(data.encrypted) iv, ciphertext = raw[:16], raw[16:] cipher = AES.new(key, AES.MODE_CBC, iv) decrypted = unpad(cipher.decrypt(ciphertext)) return {"decrypted": decrypted} except Exception: raise HTTPException(status_code=400, detail="Gagal dekripsi.")
- 🔹 Langkah 3: Jalankan backend FastAPI
Lalu buka dokumentasi interaktif: localhost:8000/docsuvicorn main:app --reload
- 🔹 Langkah 4: Buka file HTML ini di browser untuk uji coba frontend.
📌 Keamanan & Fitur
- ✅ AES-256 Mode CBC
- ✅ IV acak untuk setiap enkripsi
- ✅ Hash SHA-256 dari password (tanpa simpan password)
- ✅ Base64 Encoding agar data bisa dikirim via JSON
- ✅ PKCS7 Padding manual
- ⚠️ HTTPS & Autentikasi masih opsional (belum diaktifkan)
🚀 Siap Upgrade?
- 📂 Tambahkan upload file .txt dan hasil enkripsi otomatis
- 🔑 Tambahkan sistem login pengguna (JWT)
- ☁️ Deploy ke server online: Railway, Render, atau Fly.io
Comments
Post a Comment