一个通过隐写术在图像、音频和视频文件中编码信息的程序。可以编码任何类型的数据,从原始字符串到文件,如下所示:
左侧是一栋藏有隐写隐藏图像的房子。右侧是提取出的隐藏猫咪图像。通过去除宿主图像中每个颜色分量除最低有效位以外的所有位,即可将其显现出来。
JPEG 宿主使用 DCT 系数嵌入。在命令行中,其他 Pillow 可读的图像格式在保存时会转换为 PNG。Web API 仅接受上述列出的格式。WAV 是唯一支持的音频格式。
视频宿主使用 FFmpeg 解码,通过稳健的 DCT 信号逐帧嵌入,并以 MP4/H.264 格式写回。视频解码器专为 stegpy 视频编码器创建的文件而设计;没有 stegpy 载荷的任意视频将无法解码出有用的数据。由于视频处理可能占用大量 CPU,托管在公共 Web 演示上的视频处理被有意禁用;请使用命令行或在本地运行 Web 应用来处理视频宿主。
视频支持还需要 ffmpeg 和 ffprobe 命令行工具。
使用 uv 从 PyPI 安装当前版本作为命令行工具:
uv tool install stegpy
stegpy -h
升级现有安装:
uv tool upgrade stegpy
用于开发时,克隆仓库并使用 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
视频输入可以是上述列出的任何受支持的 FFmpeg 可读容器。stegpy 始终将编码后的视频输出写为 MP4/H.264。
默认情况下,数据在编码时不带任何保护,但可以使用 -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
由 Python 包支持的在线演示可在 https://stegpy.coseri.xyz 访问。
从仓库本地运行 FastAPI 应用和浏览器演示:
uv run uvicorn stegpy.web:app --reload
然后打开 http://127.0.0.1:8000。web-demo/ 中的静态文件需要
FastAPI /api/* 后端,直接打开 index.html 无法工作。
托管的演示支持 PNG、BMP、GIF、WebP、WAV 和 JPEG 宿主,文本或文件 载荷,以及可选的密码加密。图像/音频宿主和文件载荷上传限制为 20 MB,文本消息限制为 1 MB。其容量 显示会展示扣除 stegpy 头部、嵌入文件名和加密开销后的可用载荷字节数。
视频宿主仅在 localhost 上运行时才在 Web UI 中可用,因为 视频处理可能使小型服务器 CPU 忙碌数分钟。本地 Web UI 接受最大 5 MB 的视频宿主。
API 还提供 GET /api/health、POST /api/capacity、
POST /api/encode 和 POST /api/decode。在本地运行时,交互式 API 文档
可在 http://127.0.0.1:8000/docs 访问。
如果您觉得这个项目有用,欢迎捐赠。
Ethereum / EVM:0xfE1039ba2d4973eb6F6dd1cF3BDAF24aa6cbff96