Backup incremental AES-256, compression Zstandard, destinations multiples (USB, NAS, disque externe)
Project description
🔐 CryptBackup — Système de backup incrémental intelligent
Table des matières
- Fonctionnalités
- Prérequis
- Installation rapide
- Initialisation
- Utilisation
- Destinations supportées
- Configuration avancée
- Comment ça marche
- Sécurité
- Dépannage
- Roadmap
- Contribution
- Licence et auteur
- Remerciements
Fonctionnalités
- Backup incrémental : sauvegarde uniquement les fichiers modifiés depuis la dernière version
- Chiffrement : AES-256-GCM (authentifié)
- Compression : Zstandard (zstd)
- Surveillance en temps réel (watch) / intervalle configurable
- Destinations multiples : PC local, disque externe, NAS, clé USB — jusqu'à 3 destinations simultanées
- Détection automatique des périphériques (USB débranché, NAS hors ligne)
- Versioning : historique par fichier (versions datées)
- CLI moderne (Typer + Rich) avec options dry-run et verbose
- Restauration granulaire : par fichier, dossier, date ou version
Prérequis
- Python 3.10+
- Systèmes supportés : Windows 10/11, macOS (Intel/Apple Silicon) et distributions Linux modernes
- Destination de backup : dossier local, disque externe, NAS, clé USB, etc.
Installation rapide
Option A — Via PyPI (recommandé)
pip install cryptbackup
cryptbackup init
Option B — Depuis le code source (développement)
- Cloner le dépôt :
git clone https://github.com/stephdeve/backup-system.git
cd backup-system
- Créer et activer un environnement virtuel :
- Windows PowerShell :
python -m venv venv
.\venv\Scripts\Activate.ps1
- Windows CMD :
python -m venv venv
.\venv\Scripts\activate.bat
- macOS / Linux :
python -m venv venv
source venv/bin/activate
- Installer les dépendances :
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install -e .
Initialisation
Initialiser CryptBackup (crée configuration, base de données et clé de chiffrement) :
cryptbackup init
Ceci crée automatiquement selon votre OS :
- Windows :
%USERPROFILE%\.mybackup\config.yamlet%USERPROFILE%\.mybackup\backups.db - macOS / Linux :
~/.mybackup/config.yamlet~/.mybackup/backups.db
IMPORTANT : Sauvegardez immédiatement votre
config.yamlsur un support externe. Sans votre clé de chiffrement, la restauration est impossible.
Utilisation
Configurer les sources et destinations
Ajouter des dossiers à sauvegarder :
# Windows
cryptbackup add "C:\Users\VotreNom\Documents" --exclude "*.tmp,~*,desktop.ini"
# macOS / Linux
cryptbackup add "/home/votreuser/Documents" --exclude "*.tmp,~*,.DS_Store"
Configurer les destinations (voir section complète Destinations supportées) :
# Destination principale (dossier local)
cryptbackup config set destinations.primary "C:\Users\VotreNom\Backup"
# Destination secondaire (clé USB ou disque externe)
cryptbackup config set destinations.secondary "E:\Backup"
# Destination tertiaire (NAS réseau)
cryptbackup config set destinations.tertiary "\\192.168.1.100\backup"
Afficher la configuration :
cryptbackup config show
Lancer un backup
Backup de toutes les sources :
cryptbackup backup
Backup d'une source particulière :
# Windows
cryptbackup backup --source "C:\Users\VotreNom\Documents"
# macOS / Linux
cryptbackup backup --source "/home/votreuser/Documents"
Backup intelligent (priorisation des fichiers importants) :
cryptbackup backup --smart
Simulation (dry-run) :
cryptbackup backup --dry-run --verbose
Statut et historique
Afficher le statut :
cryptbackup status
Affiche : fichiers sauvegardés, espace utilisé / économisé, dernier backup, sources et état de toutes les destinations.
Lister les versions d'un fichier :
# Windows
cryptbackup list "C:\Users\VotreNom\Documents\rapport.pdf"
# macOS / Linux
cryptbackup list "/home/votreuser/Documents/rapport.pdf"
Restaurations
Restaurer la dernière version d'un fichier :
# Windows
cryptbackup restore --file "C:\Users\VotreNom\Documents\important.docx"
# macOS / Linux
cryptbackup restore --file "/home/votreuser/Documents/important.docx"
Restaurer à une date spécifique :
cryptbackup restore --file "C:\Users\VotreNom\Documents\rapport.pdf" --date 2026-01-15
Restaurer une version précise :
cryptbackup restore --file "C:\Users\VotreNom\app.py" --version 3
Restaurer vers un autre emplacement :
# Windows
cryptbackup restore --file "C:\Users\VotreNom\doc.txt" --destination "C:\Restored\doc.txt"
# macOS / Linux
cryptbackup restore --file "/home/votreuser/doc.txt" --destination "/home/votreuser/Restored/doc.txt"
Restaurer tout un dossier :
# Windows
cryptbackup restore --directory "C:\Users\VotreNom\Documents" --destination "C:\Restored"
# macOS / Linux
cryptbackup restore --directory "/home/votreuser/Documents" --destination "/home/votreuser/Restored"
Lister tous les fichiers disponibles pour restauration :
cryptbackup restore --list
Nettoyage / Rétention
# Conserver 30 jours et 10 versions par fichier
cryptbackup clean --keep-days 30 --keep-versions 10
# Simulation avant suppression
cryptbackup clean --dry-run
Destinations supportées
CryptBackup supporte 4 types de destinations simultanément. Configurez jusqu'à 3 destinations pour une protection maximale selon la règle 3-2-1 : 3 copies, 2 supports différents, 1 hors site.
Types de destinations
| Icône | Type | Exemple Windows | Exemple Linux/macOS |
|---|---|---|---|
| 🖥️ | Dossier local (PC) | C:\Users\Steve\Backup |
/home/user/backup |
| 🔌 | Clé USB | E:\Backup |
/media/user/usb/backup |
| 💽 | Disque dur externe | F:\Backup |
/media/user/disk/backup |
| 🌐 | NAS (réseau) | \\192.168.1.100\backup |
/mnt/nas/backup |
Configuration complète
Windows
# Dossier local sur le PC
cryptbackup config set destinations.primary "C:\Users\Steve\Backup"
# Clé USB ou disque externe
cryptbackup config set destinations.secondary "E:\Backup"
# NAS sur le réseau local
cryptbackup config set destinations.tertiary "\\192.168.1.100\backup"
Linux / macOS
# Dossier local
cryptbackup config set destinations.primary "/home/user/backup"
# Disque externe monté
cryptbackup config set destinations.secondary "/media/user/disk/backup"
# NAS monté
cryptbackup config set destinations.tertiary "/mnt/nas/backup"
Vérification de l'état des destinations
cryptbackup status
Toutes les destinations connectées :
Destinations :
🖥️ [primary] C:\Users\Steve\Backup Libre : 45.2 GB
🔌 [secondary] E:\Backup Libre : 120.5 GB
🌐 [tertiary] \\192.168.1.100\backup Libre : 1.2 TB
USB débranché — CryptBackup continue sur les autres :
Destinations :
🖥️ [primary] C:\Users\Steve\Backup Libre : 45.2 GB
🔌 [secondary] E:\Backup Destination non trouvée (périphérique débranché ?)
🌐 [tertiary] \\192.168.1.100\backup Libre : 1.2 TB
Note : Si une destination est inaccessible (USB débranché, NAS hors ligne), CryptBackup continue automatiquement vers les destinations disponibles et vous en informe.
🔧 Configuration avancée
Fichier de configuration :
- Windows :
%USERPROFILE%\.mybackup\config.yaml - macOS / Linux :
~/.mybackup/config.yaml
Exemple de structure complète :
version: '1.0.1'
created_at: '2026-01-20T14:30:00'
encryption:
algorithm: AES-256-GCM
key: 'VOTRE_CLE_SECRETE_ICI'
compression:
enabled: true
algorithm: zstd
level: 3 # 1 (rapide) à 22 (max compression)
sources:
- path: C:\Users\VotreNom\Documents
exclude: ['*.tmp', '~*', 'desktop.ini']
added_at: '2026-01-20T14:35:00'
destinations:
primary: C:\Users\VotreNom\Backup # Dossier local
secondary: E:\Backup # Clé USB / disque externe
tertiary: \\192.168.1.100\backup # NAS
watch:
enabled: true
interval: 300 # secondes
realtime: true
retention:
keep_days: 30
keep_versions: 10
auto_clean: false
Modifier via CLI :
cryptbackup config set compression.level 5
cryptbackup config set retention.auto_clean true
cryptbackup config set watch.interval 600
Comment ça marche (aperçu technique)
Pour chaque fichier modifié :
- Calcul du hash SHA-256 (détecte les modifications)
- Compression Zstandard (zstd)
- Chiffrement AES-256-GCM (Cryptography.io)
- Stockage du binaire chiffré (
.enc) sur chaque destination accessible - Enregistrement des métadonnées dans SQLite (hash, taille, timestamp, version)
Structure sur destination :
D:\Backups\
├── a3f5c892e1b4...enc (version 1 de app.py)
├── d9g3h456f2c8...enc (version 2 de app.py)
└── ...
La base de données contient : chemin original, version, hash, tailles (original / compressé / chiffré), timestamps, ratio de compression.
🔒 Sécurité
- Algorithme : AES-256-GCM (authentifié)
- Bibliothèque : cryptography (best-effort FIPS-aware usage)
- Intégrité : vérification SHA-256 avant et après chiffrement — corruption détectée à la restauration
- Permissions Unix : 700 (dossiers) / 600 (fichiers sensibles)
- Clé stockée dans
config.yaml— à sauvegarder hors-site impérativement
Sauvegarde de la clé :
# Windows
copy $env:USERPROFILE\.mybackup\config.yaml F:\backup_key.yaml
# macOS / Linux
cp ~/.mybackup/config.yaml /mnt/secure/backup_key.yaml
Sans la clé : restauration impossible. Conservez plusieurs copies (clé USB, cloud chiffré, coffre physique).
Dépannage
| Erreur | Solution |
|---|---|
| "CryptBackup n'est pas initialisé" | Exécuter cryptbackup init |
| "Destination manquante" | cryptbackup config set destinations.primary "D:\Backups" |
| "Clé de chiffrement invalide" | Restaurer votre config.yaml depuis votre copie de sauvegarde |
| Backup lent | Diminuer la compression (level 1) ou exclure plus de fichiers |
| Permission denied | Vérifier permissions NTFS (Windows) ou POSIX (Linux/macOS) |
| USB non détecté | Vérifier que le périphérique est monté, relancer cryptbackup status |
| NAS inaccessible | Vérifier la connexion réseau, les identifiants et le montage |
Roadmap
Terminé
- Backup incrémental avec chiffrement AES-256-GCM
- Compression Zstandard
- CLI moderne (Typer + Rich)
- Surveillance temps réel (watchdog)
- Priorisation intelligente des fichiers
- Destinations multiples (local, USB, disque externe, NAS)
- Détection automatique des périphériques
En cours
- Dashboard web (FastAPI + interface graphique)
- Daemon de surveillance en arrière-plan (service système)
Futur
- Support cloud chiffré (Backblaze B2, AWS S3)
- Application mobile (monitoring)
- Multi-utilisateurs (entreprises)
- API REST
🤝 Contribution
Suggestions et contributions bienvenues. Ouvrez une issue ou une pull request sur GitHub.
GitHub : stephdeve/cryptbackup PyPI : pypi.org/project/cryptbackup
Licence
MIT License — utilisation libre, modification et distribution autorisées.
Auteur
StephDev — Développeur (Cotonou, Bénin). Projet réalisé dans le cadre d'un apprentissage Python avancé.
Remerciements
- cryptography.io — Chiffrement AES-256
- Zstandard — Compression
- Typer — CLI moderne
- Rich — Interface terminal
- Watchdog — Surveillance fichiers
⚡ Quick Start (résumé)
# 1. Installer
pip install cryptbackup
# 2. Initialiser
cryptbackup init
# 3. Ajouter une source
cryptbackup add "C:\Users\VotreNom\Documents" # Windows
cryptbackup add "/home/votreuser/Documents" # Linux/macOS
# 4. Configurer les destinations
cryptbackup config set destinations.primary "C:\Users\VotreNom\Backup" # Local
cryptbackup config set destinations.secondary "E:\Backup" # USB / Externe
cryptbackup config set destinations.tertiary "\\192.168.1.100\backup" # NAS
# 5. Lancer un backup
cryptbackup backup
# 6. Vérifier l'état
cryptbackup status
# 7. Restaurer un fichier
cryptbackup restore --file "C:\Users\VotreNom\Documents\fichier.txt"
Vos données sont maintenant protégées. 🎉
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cryptbackup-1.0.6.tar.gz.
File metadata
- Download URL: cryptbackup-1.0.6.tar.gz
- Upload date:
- Size: 39.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d2a7ac7039aa5cf36e037686e73669d82841c2025695b9f77d736911036405c
|
|
| MD5 |
2f1778082e91bc8e621b760b31bd8a6f
|
|
| BLAKE2b-256 |
4333ac35ad1631617e5bf3bb33243a4d0a1239a61bfe180e18b802e38f19909c
|
File details
Details for the file cryptbackup-1.0.6-py3-none-any.whl.
File metadata
- Download URL: cryptbackup-1.0.6-py3-none-any.whl
- Upload date:
- Size: 41.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7614f328dad0a6d3aa10cb93d91b2937dbd369a65a9696d767f5e8120e1bb13e
|
|
| MD5 |
44f7c4c973574d1749d7bfd512baa516
|
|
| BLAKE2b-256 |
109d19599a1168dcc084f8deaabb5fb72d42d09705a59879b80c02d906f62ea0
|