Adaptasi Vault Dokumen ke Backend FastAPI v5 ???

Vault Terenkripsi AES-256

🔐 Vault Terenkripsi AES-256




📋 Panduan Ringkas

  1. 🔹 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
          
  2. 🔹 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.")
          
  3. 🔹 Langkah 3: Jalankan backend FastAPI
    uvicorn main:app --reload
    Lalu buka dokumentasi interaktif: localhost:8000/docs
  4. 🔹 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

Popular posts from this blog

1 Seo Postingan Tabel

Terkunci Login, Batas Salah Password, & Reset Manual