diff --git a/README.md b/README.md new file mode 100644 index 0000000..8fb89ac --- /dev/null +++ b/README.md @@ -0,0 +1,100 @@ +**Cryptage — Chiffrement/déchiffrement CSV pour Amadea** +Outil en ligne de commande pour chiffrer et déchiffrer les champs Symbolic des exports CSV Amadea. +- **Algorithme** : AES-256-GCM (chiffrement authentifié) +- **Gestion des clés** : fichier de clé (aléatoire ou dérivé d'un mot de passe via Argon2id) +- **Performance** : ~0.14s pour 100 000 lignes × 3 champs +- **Taille** : ~740 Ko, aucune dépendance +![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANklEQVR4nO3OMQ2AABAAsSPBCj7fFRYQwYwEZiywEZJWQZeZ2ao9AAD+4lyruzq+ngAA8Nr1AMTJBeJDClAyAAAAAElFTkSuQmCC) +**Installation** +Copier cryptage.exe sur le poste Windows. Aucune installation requise. +![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANUlEQVR4nO3OQQmAABRAsSeYxKS/kJkED6bwYAVvImwJtszMVu0BAPAXx1rd1fn1BACA164HHDwF+DpPyKwAAAAASUVORK5CYII=) +**Utilisation** +**1. Générer une clé** +# Clé aléatoire (recommandé) + cryptage --generate-key +  + # Clé dérivée d'un mot de passe + cryptage --generate-key -p +  +Le fichier cryptage.key est créé à côté de l'exécutable. **Ce fichier est secret** — sans lui, impossible de déchiffrer les données. +**2. Chiffrer** +cryptage Input.csv Output.csv +  +**3. Déchiffrer** +cryptage -d Input.csv Output.csv +  +  +  +**4. Options** +| | | +|-|-| +| **Option** | **Description** | +| -d | Mode déchiffrement | +| -k chemin | Utiliser un fichier de clé spécifique | +| -p | Dériver la clé d'un mot de passe (avec --generate-key) | +| --generate-key | Générer une nouvelle clé | +| --version | Afficher la version | +| --help | Afficher l'aide | +  +Exemple avec clé personnalisée : +cryptage -k C:\cles\ma_cle.key Input.csv Output.csv + cryptage -d -k C:\cles\ma_cle.key Input.csv Output.csv +  +![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANUlEQVR4nO3OQQmAABRAsSfYxKK/kYXEkyk8WcGbCFuCLTOzVXsAAPzFuVZ3dXw9AQDgtesB/v8F8JQadPwAAAAASUVORK5CYII=) +**Format CSV** +Le séparateur est **;** (point-virgule). Le fichier doit respecter cette structure : +| | | | +|-|-|-| +| **Ligne** | **Contenu** | **Description** | +| 1 | Noms des colonnes | En-têtes | +| 2 | Types des colonnes | Integer, Symbolic, Real, etc. | +| 3+ | Données | Valeurs | +  +**Seules les colonnes de type ** **Symbolic** ** sont chiffrées/déchiffrées.** Les autres colonnes sont recopiées telles quelles. +![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANUlEQVR4nO3OMQ2AUBBAsUfyNTCi9VwgEA3sWGAjJK2CbjNzVGcAAPzFtapV7V9PAAB47X4AEW4ELQDBN+AAAAAASUVORK5CYII=) +**Exemple complet** +**Fichier d'entrée (**Input.csv **) — données en clair** +ID;N_sejour;N_IPP;CP;Age;Tarif + Integer;Integer;Symbolic;Symbolic;Integer;Real + 1;2422530;879856498;33740;37;2984 + 2;2422592;317489412;33680;15;1568 + 3;2422985;971433167;33121;74;8974 +  +  +  +  +**Chiffrement** +cryptage Input.csv Encrypted.csv +  +**Résultat (**Encrypted.csv **)** +ID;N_sejour;N_IPP;CP;Age;Tarif + Integer;Integer;Symbolic;Symbolic;Integer;Real + 1;2422530;HeqPi34BQRtwn2HpNbQXp+2aXTlD6s2h9JTAquMGqAvWsjhGVA==;xGPx2RbV1oA...;37;2984 + 2;2422592;Ig+sAargNQwZ8Usfl56i2KGQCtEzUpRU1oxb38dRzCBb08+P9Q==;5lMQf50RJDT...;15;1568 + 3;2422985;1NypB/jH/1BH1dS3UiorHefe+KLWPmMHuSe+38mE1FVMskmxww==;+g11Noa/hSW...;74;8974 +  +Les colonnes N_IPP et CP (Symbolic) sont chiffrées en base64. Les colonnes ID, N_sejour, Age et Tarif restent inchangées. +**Déchiffrement** +cryptage -d Encrypted.csv Decrypted.csv +  +**Résultat (**Decrypted.csv **) — identique à l'original** +ID;N_sejour;N_IPP;CP;Age;Tarif + Integer;Integer;Symbolic;Symbolic;Integer;Real + 1;2422530;879856498;33740;37;2984 + 2;2422592;317489412;33680;15;1568 + 3;2422985;971433167;33121;74;8974 +  +![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANElEQVR4nO3OUQmAABBAsSeIWMICprwEpjSIFfwTYUuwZWaO6goAgL+412qrzq8nAAC8tj8tdQNNdXaCdAAAAABJRU5ErkJggg==) +**Sécurité** +- **AES-256-GCM** : chiffrement authentifié (confidentialité + intégrité) +- Chaque valeur utilise un **IV aléatoire unique** — chiffrer deux fois la même valeur produit un résultat différent +- La clé dérivée par mot de passe utilise **Argon2id** (résistant aux attaques par force brute) +- Le fichier cryptage.key doit être protégé (droits d'accès restrictifs, ne pas le transmettre par email) +![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANklEQVR4nO3OMQ2AABAAsSNBACP6MMH6NpGACyywEZJWQZeZ2aszAAD+4l6rrTq+ngAA8Nr1AL+6BElk4wV6AAAAAElFTkSuQmCC) +  +  +**Workflow Amadea** +Base Amadea         Input.csv          cryptage.exe         Output.csv         Base Amadea +  (cryptée)     →    (extraction)    →   -d (déchiffre)   →  (en clair)    →   (mise à jour) +  (en clair)    →    (extraction)    →      (chiffre)     →  (chiffré)     →   (mise à jour) +