
Programme de stéganographie simple basé sur la méthode LSB.
Un programme permettant d'encoder des informations dans des fichiers image, audio et vidéo par stéganographie. Tout type de données peut être encodé, des chaînes brutes aux fichiers, comme illustré ci-dessous :
À gauche, une maison contenant une image cachée par stéganographie. À droite, l'image cachée extraite d'un chat. Elle est révélée en ne conservant que le bit de poids faible de chaque composante de couleur de l'image hôte.
Les hôtes JPEG utilisent l'insertion dans les coefficients DCT. En ligne de commande, les autres formats d'image lisibles par Pillow sont convertis en PNG lors de l'enregistrement. L'API web n'accepte que les formats listés ci-dessus. WAV est le seul format audio pris en charge.
Les hôtes vidéo sont décodés avec FFmpeg, insérés image par image avec un signal DCT robuste, puis réécrits en MP4/H.264. Le décodeur vidéo est destiné aux fichiers créés par l'encodeur vidéo de stegpy ; les vidéos arbitraires dépourvues de charge utile stegpy ne permettront pas de décoder des données utiles. Le traitement vidéo est volontairement désactivé sur la démo web publique hébergée, car il peut être gourmand en CPU ; utilisez la CLI ou exécutez l'application web localement pour les hôtes vidéo.
La prise en charge vidéo nécessite également les outils en ligne de commande ffmpeg et ffprobe.
Installez la version actuelle depuis PyPI en tant qu'outil en ligne de commande avec uv :
uv tool install stegpy
stegpy -h
Mettez à jour une installation existante avec :
uv tool upgrade stegpy
Pour le développement, clonez le dépôt et créez l'environnement avec uv :
git clone https://github.com/izcoser/stegpy.git
cd stegpy
uv sync --dev
uv run stegpy -h
stegpy "Hello World!" image.png
stegpy _image.png
stegpy "Hello video!" clip.mp4
stegpy _clip.mp4
Les entrées vidéo peuvent être n'importe quel conteneur pris en charge et lisible par FFmpeg parmi ceux listés ci-dessus. stegpy écrit toujours la sortie vidéo encodée au format MP4/H.264.
Les données sont encodées sans aucune protection par défaut, mais elles peuvent être chiffrées avec l'option -p :
stegpy "Hello World!" image.png -p
Enter password (will not be echoed):
Verify password (will not be echoed):
stegpy _image.png -p
Enter password (will not be echoed):
Hello World!
stegpy -h
Une démo en ligne s'appuyant sur le paquet Python est disponible à l'adresse https://stegpy.coseri.xyz.
Exécutez l'application FastAPI et la démo navigateur localement depuis le dépôt :
uv run uvicorn stegpy.web:app --reload
Ouvrez ensuite http://127.0.0.1:8000. Les fichiers statiques du dossier web-demo/ nécessitent le backend FastAPI /api/* et ne fonctionnent pas en ouvrant index.html directement.
La démo hébergée prend en charge les hôtes PNG, BMP, GIF, WebP, WAV et JPEG, les charges utiles texte ou fichier, ainsi que le chiffrement par mot de passe optionnel. Les téléversements d'hôtes image/audio et de charges utiles fichier sont limités à 20 Mo, et les messages texte à 1 Mo. Son affichage de capacité indique les octets de charge utile utilisables après l'en-tête stegpy, le nom de fichier intégré et la surcharge de chiffrement.
Les hôtes vidéo ne sont disponibles dans l'interface web que lors d'une exécution sur localhost, car le traitement vidéo peut occuper le CPU d'un petit serveur pendant plusieurs minutes. L'interface web locale accepte les hôtes vidéo jusqu'à 5 Mo.
L'API expose également GET /api/health, POST /api/capacity,
POST /api/encode et POST /api/decode. Une documentation interactive de l'API est
disponible à l'adresse http://127.0.0.1:8000/docs lors d'une exécution locale.
Les dons sont appréciés si vous trouvez ce projet utile.
Ethereum / EVM : 0xfE1039ba2d4973eb6F6dd1cF3BDAF24aa6cbff96