MeshDrive est un système de stockage sécurisé décentralisé qui permet de chiffrer, stocker et gérer des fichiers de manière sécurisée. Chaque utilisateur peut héberger son propre serveur pour stocker ses fichiers chiffrés.
- Fonctionnalités
- Architecture
- Installation
- Utilisation
- Structure du projet
- API Documentation
- Sécurité
- Développement
- ✅ Chiffrement AES-256-GCM : Chiffrement de bout en bout avec AES-256-GCM
- ✅ Découpage en chunks : Fichiers divisés en chunks de 1 Mo pour une gestion optimale
- ✅ Upload/Download : Upload et téléchargement de fichiers avec préservation du nom original
- ✅ Suppression : Suppression sécurisée des fichiers et de leurs chunks
- ✅ Structure hiérarchique : Organisation des fichiers en dossiers et sous-dossiers
- ✅ Création/Suppression : Gestion complète des dossiers avec suppression récursive
- ✅ Déplacement de fichiers : Déplacement de fichiers entre dossiers
- ✅ Téléchargement ZIP : Téléchargement de dossiers complets en archive ZIP
- ✅ Interface moderne : Interface web responsive avec thème sombre
- ✅ Drag & Drop : Upload de fichiers par glisser-déposer
- ✅ Upload de dossiers : Upload de plusieurs fichiers simultanément
- ✅ Recherche et tri : Recherche et tri des fichiers par nom, date ou taille
- ✅ Sélection multiple : Sélection multiple de fichiers pour actions en masse
- ✅ Navigation : Navigation avec historique (retour/avancer)
- ✅ Breadcrumb : Affichage du chemin actuel avec navigation
┌─────────────────────────────────────────┐
│ Frontend (Web) │
│ - HTML/CSS/JavaScript (Vanilla) │
│ - API REST (fetch) │
└─────────────────┬───────────────────────┘
│
┌─────────────────▼───────────────────────┐
│ Backend (FastAPI) │
│ - FastAPI (Python 3.13+) │
│ - CORS middleware │
│ - Static files serving │
└─────────────────┬───────────────────────┘
│
┌─────────────────▼───────────────────────┐
│ Cryptolib (Library) │
│ - Chiffrement AES-256-GCM │
│ - Gestion des chunks │
│ - Gestion des métadonnées │
│ - Gestion des dossiers │
└─────────────────────────────────────────┘
- Frontend (
web/) : Interface utilisateur web moderne - Backend (
api/) : API REST FastAPI - Cryptolib (
cryptolib/) : Bibliothèque de chiffrement et gestion de fichiers - P2P (
p2p/) : Scripts pour les échanges peer-to-peer (en développement)
- Python 3.13 ou supérieur
- pip (gestionnaire de paquets Python)
# Depuis la racine du projet
pip install fastapi uvicorn python-multipart cryptographyLe projet créera automatiquement les dossiers suivants :
data/keys/: Métadonnées et clés de chiffrement (JSON)data/chunks/: Fichiers chiffrés (chunks .enc)
cd api
python run_api.pyL'API sera accessible sur http://localhost:8000
Ouvrez votre navigateur et accédez à :
- Dashboard : http://localhost:8000/ (page d'accueil avec lien vers le drive)
- Drive : http://localhost:8000/drive (interface complète de gestion des fichiers)
- Documentation API : http://localhost:8000/docs
- ReDoc : http://localhost:8000/redoc
-
Uploader un fichier :
- Cliquez sur "📤 Upload" ou glissez-déposez un fichier
- Le fichier sera automatiquement chiffré et stocké
-
Télécharger un fichier :
- Clic droit sur un fichier → "📥 Télécharger"
- Ou sélectionnez plusieurs fichiers et cliquez sur "📥 Télécharger sélection"
-
Créer un dossier :
- Cliquez sur "📁 Nouveau dossier"
- Entrez le nom du dossier
-
Déplacer un fichier :
- Clic droit sur un fichier → "📦 Déplacer"
- Sélectionnez le dossier de destination
-
Supprimer :
- Clic droit → "🗑️ Supprimer"
- Ou sélectionnez plusieurs éléments et cliquez sur "🗑️ Supprimer la sélection"
MeshDrive/
├── api/ # API FastAPI
│ ├── crypto_api.py # Endpoints de l'API
│ ├── run_api.py # Script de lancement
│ └── README.md # Documentation API
│
├── cryptolib/ # Bibliothèque de chiffrement
│ ├── __init__.py # Point d'entrée principal
│ ├── config.py # Configuration
│ ├── models.py # Modèles de données
│ ├── chunk_manager.py # Gestion des chunks
│ ├── encryptor.py # Chiffrement
│ ├── decryptor.py # Déchiffrement
│ ├── metadata_manager.py # Gestion des métadonnées
│ └── folder_manager.py # Gestion des dossiers
│
├── web/ # Interface web
│ ├── dashboard.html # Page d'accueil (Dashboard)
│ ├── drive.html # Interface principale (Drive)
│ ├── styles.css # Styles CSS
│ ├── js/ # Modules JavaScript
│ │ ├── api.js # Client API JavaScript
│ │ ├── state.js # État global
│ │ ├── utils.js # Utilitaires
│ │ ├── navigation.js # Navigation
│ │ ├── ui.js # Interface utilisateur
│ │ ├── files.js # Gestion des fichiers
│ │ ├── folders.js # Gestion des dossiers
│ │ ├── dragdrop.js # Drag & drop
│ │ └── main.js # Point d'entrée
│ └── README.md # Documentation web
│
├── p2p/ # Peer-to-peer (en développement)
│ ├── listener.py
│ └── sender.py
│
├── data/ # Données (ignoré par git)
│ ├── keys/ # Métadonnées et clés de chiffrement
│ │ └── _folders/ # Métadonnées des dossiers
│ └── chunks/ # Fichiers chiffrés (chunks .enc)
│
├── .gitignore # Fichiers ignorés par git
└── README.md # Ce fichier
POST /encrypt: Chiffrer un fichierGET /decrypt/{file_id}: Déchiffrer un fichierGET /files: Lister les fichiersGET /files/{file_id}: Informations d'un fichierPUT /files/{file_id}/move: Déplacer un fichierDELETE /files/{file_id}: Supprimer un fichier
POST /folders: Créer un dossierGET /folders: Lister les dossiersGET /folders-all: Lister tous les dossiersGET /folders/{folder_path}: Informations d'un dossierDELETE /folders/{folder_path}: Supprimer un dossierGET /folder-contents: Contenu d'un dossierGET /download-folder/{folder_path}: Télécharger un dossier en ZIPPOST /encrypt-folder: Uploader plusieurs fichiers
GET /: Page d'accueil (Dashboard)GET /drive: Interface complète de gestion des fichiers (Drive)
GET /health: État de l'API
Pour la documentation complète, consultez :
- Swagger UI : http://localhost:8000/docs
- ReDoc : http://localhost:8000/redoc
# Chiffrer un fichier
curl -X POST "http://localhost:8000/encrypt" \
-F "file=@mon_fichier.pdf" \
-F "folder_path=/"
# Lister les fichiers
curl "http://localhost:8000/files?folder_path=/"
# Déchiffrer un fichier
curl "http://localhost:8000/decrypt/{file_id}?download=true" \
--output fichier_dechiffre.pdf
# Créer un dossier
curl -X POST "http://localhost:8000/folders" \
-H "Content-Type: application/json" \
-d '{"folder_name": "MonDossier", "parent_path": "/"}'- Algorithme : AES-256-GCM (Advanced Encryption Standard en mode GCM)
- Taille de clé : 256 bits
- Taille de nonce : 96 bits
- Taille des chunks : 1 Mo par défaut
- Clés de chiffrement : Stockées dans
data/keys/(JSON) - Fichiers chiffrés : Stockés dans
data/chunks/(chunks .enc) - Métadonnées : Stockées dans
data/keys/(JSON)
data/ ne doit jamais être committé sur Git. Il est automatiquement ignoré par .gitignore.
- Ne partagez jamais vos clés de chiffrement
- Sauvegardez régulièrement le dossier
data/keys/ - Utilisez HTTPS en production
- Configurez CORS correctement pour la production
Éditez cryptolib/config.py pour modifier :
- Taille des chunks (
CHUNK_SIZE) - Répertoires de stockage (
DATA_DIR,KEYS_DIR,CHUNKS_DIR) - Niveau de logging (
LOG_LEVEL)
- Backend : Ajoutez les endpoints dans
api/crypto_api.py - Frontend : Ajoutez les fonctions dans
web/js/etweb/api.js - Cryptolib : Ajoutez la logique métier dans
cryptolib/
Un script de test est disponible dans api/test_crypto_api.py :
cd api
python test_crypto_api.pyLes logs sont affichés dans la console avec des emojis pour faciliter la lecture :
- 🔐 Chiffrement
- 🔓 Déchiffrement
- 📁 Dossiers
- 🗑️ Suppression
- ✅ Succès
- ❌ Erreur
- Les fichiers sont automatiquement chiffrés lors de l'upload
- Les noms de fichiers originaux sont préservés
- La suppression d'un dossier supprime récursivement tous ses fichiers et sous-dossiers
- L'historique de navigation permet de naviguer entre les dossiers visités
Ce projet est en développement actif. Les contributions sont les bienvenues !
Voir le fichier LICENSE pour plus d'informations.
Développé avec ❤️ pour un stockage sécurisé et décentralisé