
Programa de esteganografía simple basado en el método LSB.
Un programa para codificar información en archivos de imagen, audio y vídeo mediante esteganografía. Se puede codificar cualquier tipo de dato, desde cadenas de texto sin formato hasta archivos, como se muestra a continuación:
A la izquierda, una casa con una imagen oculta de forma esteganográfica. A la derecha, la imagen oculta extraída de un gato. Se revela eliminando todos los bits de cada componente de color de la imagen anfitriona excepto el menos significativo.
Los anfitriones JPEG utilizan incrustación en coeficientes DCT. En la CLI, otros formatos de imagen legibles por Pillow se convierten a PNG al guardarse. La API web acepta únicamente los formatos enumerados anteriormente. WAV es el único formato de audio compatible.
Los anfitriones de vídeo se decodifican con FFmpeg, se incrustan fotograma a fotograma con una señal DCT robusta y se escriben de nuevo como MP4/H.264. El decodificador de vídeo está pensado para archivos creados por el codificador de vídeo de stegpy; los vídeos arbitrarios sin una carga útil de stegpy no decodificarán datos útiles. El procesamiento de vídeo está deshabilitado intencionadamente en la demo web pública alojada porque puede consumir mucha CPU; utilice la CLI o ejecute la aplicación web localmente para anfitriones de vídeo.
La compatibilidad con vídeo también requiere las herramientas de línea de comandos ffmpeg y ffprobe.
Instale la versión actual desde PyPI como herramienta de línea de comandos con uv:
uv tool install stegpy
stegpy -h
Actualice una instalación existente con:
uv tool upgrade stegpy
Para desarrollo, clone el repositorio y cree el entorno con 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
Las entradas de vídeo pueden ser cualquier contenedor compatible con FFmpeg de los enumerados anteriormente. stegpy siempre escribe la salida de vídeo codificada como MP4/H.264.
Los datos se codifican sin ninguna protección por defecto, pero se pueden cifrar con el flag -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
Hay una demo en vivo respaldada por el paquete de Python disponible en https://stegpy.coseri.xyz.
Ejecute la aplicación FastAPI y la demo del navegador localmente desde el repositorio:
uv run uvicorn stegpy.web:app --reload
Luego abra http://127.0.0.1:8000. Los archivos estáticos en web-demo/ requieren el backend FastAPI /api/* y no funcionan abriendo index.html directamente.
La demo alojada admite anfitriones PNG, BMP, GIF, WebP, WAV y JPEG, cargas útiles de texto o archivo, y cifrado opcional con contraseña. Las cargas de anfitriones de imagen/audio y de archivos de carga útil están limitadas a 20 MB, y los mensajes de texto están limitados a 1 MB. Su indicador de capacidad muestra los bytes de carga útil utilizables después de la cabecera de stegpy, el nombre de archivo incrustado y la sobrecarga del cifrado.
Los anfitriones de vídeo están disponibles en la interfaz web solo cuando se ejecuta en localhost, porque el procesamiento de vídeo puede mantener ocupada la CPU de un servidor pequeño durante minutos. La interfaz web local acepta anfitriones de vídeo de hasta 5 MB.
La API también expone GET /api/health, POST /api/capacity,
POST /api/encode y POST /api/decode. La documentación interactiva de la API está disponible en http://127.0.0.1:8000/docs cuando se ejecuta localmente.
Se agradecen las donaciones si encuentra útil este proyecto.
Ethereum / EVM: 0xfE1039ba2d4973eb6F6dd1cF3BDAF24aa6cbff96