# 🔐 ComfyUI EncryptMaster image Pack **ComfyUI** de nœuds pour **chiffrer** et **cacher** du texte ou des images. Sécurité : **AES-256-GCM** (authentifié) avec dérivation de clé **scrypt**. Stéganographie : **LSB** (PNG/TIFF) et **DCT/JPEG** (plus robuste aux recompressions). --- ## 📁 Contenu Dossier : `ComfyUI/custom_nodes/Comfyui_EncryptMaster/` - `text_cipher.py` — Text Cipher (chiffrer/déchiffrer une chaîne) - `stego_text.py` — Stego Text (cacher/extraire du texte dans une image, LSB) - `stego_capacity.py` — Stego Capacity Estimator (capacité d’une image en LSB) - `image_cipher.py` — Image ⇄ Noise (image chiffrée rendue comme “bruit”) - `stego_image_in_image.py` — Stego Image-in-Image (cacher une image dans une autre, compression avant chiffrement) - `generate_passphrase.py` — Generate Passphrase (phrases de passe solides) --- ## ⚙️ Installation 1) Copier ce dépôt dans : ComfyUI/custom_nodes/Comfyui_EncryptMaster 2) Activer votre venv puis installer les dépendances : pip install cryptography pillow numpy 3) Relancer ComfyUI. Les nœuds « EncryptMaster — … » apparaissent dans la recherche. Testé avec Python 3.10–3.12, ComfyUI ≥ 0.3.x, Windows / Linux. --- ## 🔑 Sécurité (résumé) - **Chiffrement** : AES-256-GCM (authentifié). - **Dérivation** : scrypt (N=2^14, r=8, p=1) depuis une passphrase humaine. - **Associated Data (AAD)** : champ `associated_data` optionnel, non chiffré mais **authentifié**. Si l’AAD ne correspond pas entre chiffrement et déchiffrement, le déchiffrement échoue. --- ## 🧩 Nœuds et usages image image image image image image ### 1) EncryptMaster — Text Cipher (AES-GCM) - **Entrées** - `text` (STRING) : texte clair ou blob chiffré. - `passphrase` (STRING) : mot/phrase de passe. - `mode` (STRING) : "encrypt" ou "decrypt". - `associated_data` (STRING, optionnel). - **Sorties** - `text` (STRING) : texte chiffré « armored » ou texte déchiffré. - **Notes** - Parfait pour sécuriser prompts, JSON ou credentials avant stockage. --- ### 2) EncryptMaster — Stego Embed Text (AES-GCM) / Stego Extract Text - **But** : cacher un texte chiffré dans les **bits de poids faible (LSB)** d’une image. - **Entrées (Embed)** - `image` (IMAGE), `text` (STRING), `passphrase` (STRING) - `bits_per_channel` : 1 (discret) ou 2 (×2 capacité) - `associated_data` (STRING, optionnel) - **Sorties (Embed)** - `image` (IMAGE) : même visuel, message caché. - **Entrées (Extract)** - `image` (IMAGE), `passphrase` (STRING), `associated_data` (STRING, optionnel) - **Sorties (Extract)** - `text` (STRING) : texte en clair. - **Conseils** - Sauvegarder en **PNG/TIFF** (sans perte). - Éviter toute recompression/redimensionnement après l’embed. --- ### 3) EncryptMaster — Stego Capacity Estimator - **But** : estimer la **capacité maximale** (octets et nombre de caractères) d’une image pour l’embed LSB. - **Entrées** - `image` (IMAGE), `bits_per_channel` (1/2) - **Sorties** - `capacity_bytes` (INT), `capacity_chars` (INT), `report` (STRING) - **Rappel rapide** - Capacité brute ≈ `largeur × hauteur × 3 × bpc / 8` octets. --- ### 4) EncryptMaster — Image Cipher → Noise (AES-GCM) ### EncryptMaster — Image Decipher ← Noise (AES-GCM) - **But** : chiffrer **tous les pixels** d’une image et produire une image de **bruit aléatoire** (réversible). - **Entrées (Cipher)** - `image` (IMAGE), `passphrase` (STRING) - `associated_data` (STRING, optionnel) - `preserve_width` (BOOLEAN) : conserve la largeur; la hauteur s’ajuste si nécessaire. - **Sorties (Cipher)** - `image` (IMAGE bruitée), `out_width` (INT), `out_height` (INT) - **Entrées (Decipher)** - `image` (IMAGE bruitée), `passphrase` (STRING), `associated_data` (STRING, optionnel) - **Sorties (Decipher)** - `image` (IMAGE originale), `report` (STRING) - **Important** - Toujours **sauver en PNG/TIFF**. Le JPEG détruit des octets → déchiffrement impossible. --- ### 5) EncryptMaster — Stego Embed Image (LSB/AES-GCM) / Stego Extract Image - **But** : cacher une **image secrète** B dans une **image porteuse** A (LSB), en **compressant** le secret **avant chiffrement**. - **Entrées (Embed)** - `cover_image` (IMAGE), `secret_image` (IMAGE), `passphrase` (STRING) - `bits_per_channel` : 1 ou 2 - `secret_encode` : "jpeg" (recommandé) ou "png" - `jpeg_quality` (50–95) : qualité du secret si "jpeg" - `resize_secret_to_cover` (BOOLEAN) : redimensionner le secret à la cover - `associated_data` (STRING, optionnel) - **Sorties (Embed)** - `image` (IMAGE), `report` (STRING) - **Entrées (Extract)** - `image` (IMAGE), `passphrase` (STRING), `associated_data` (STRING, optionnel) - **Sorties (Extract)** - `image` (secret reconstruit), `report` (STRING) - **Capacité (ordre de grandeur)** - Cover 1216×1600 @ 1 bpc ≈ ~712 KiB ; @ 2 bpc ≈ ~1.42 MiB. - Secret 1216×1600 en **JPEG q85** ≈ 200–400 Ko → OK avec 2 bpc. - Mode **PNG** lossless souvent plus volumineux → nécessitera une cover plus grande ou 2 bpc. - **Format de sortie** - Sauver la cover modifiée en **PNG/TIFF** (pas de recompression JPEG après embed). --- ### 6) EncryptMaster — Generate Passphrase - **But** : générer une phrase de passe robuste (type Diceware). - **Astuce** : viser ≥ 24 caractères ou 8–9 mots aléatoires. --- ## 🧪 Workflows types ### A) Cacher un texte chiffré dans une image (PNG) [Text Box] -> [Text Cipher (encrypt)] -> [Stego Embed Text] -> [Save Image (PNG)] ### B) Cacher une image dans une autre [Load Cover] + [Load Secret] -> [Stego Embed Image (secret_encode=jpeg, bpc=2)] -> [Save Image (PNG)] ### C) Chiffrer une image en « bruit » (réversible) [Load Image] -> [Image Cipher → Noise] -> [Save Image (PNG)] [Load Noise] -> [Image Decipher ← Noise] -> [Preview] --- ## ✅ Bonnes pratiques - Utiliser **Generate Passphrase** pour des passphrases solides. - Renseigner un **`associated_data`** stable (ex. `project=EncryptMaster;v=1`) et le réutiliser à l’extraction. - Ne pas compresser les images codées, format export png ou tiff, ne pas réenregister les images en jpeg, beaucoup de réseaux sociaux réencodent les images (cryptage infonctionnel). ---

🌟 Show Your Support

If this project helped you, please consider giving it a ⭐ on GitHub!

Made with ❤️ for the ComfyUI community

by Orion4D

Buy Me A Coffee