Skip to content

Repository files navigation

StegaPy: A Python-Based Steganography Tool

Python Version License Code Lines GitHub stars

语言: 中文 | English

StegaPy 是一个基于 Python 的图像隐写与数字水印工具。隐写术(Steganography)将秘密信息藏匿于普通载体图像之中,使其在视觉上与原图无异;数字水印则通过在图像中嵌入不可见标记,用于版权归属验证。

本项目参考 OpenStego 进行 Python 重写,复现了原版核心算法,并引入插件化架构、随机散布隐写、Web 交互界面与命令行接口等扩展。

✨ 功能特性

  • 插件化架构:LSB、RandomLSB、DWT-Dugad 三种算法通过统一接口接入,可灵活扩展新算法
  • 随机散布隐写(RandomLSB):以密码学伪随机序列打乱位写入顺序,有效抵抗针对顺序 LSB 的卡方统计攻击
  • AES 加密 + Gzip 压缩:支持 AES-128/256 对载荷加密,Gzip 自适应压缩显著扩大有效荷载空间
  • Web 可视化界面:基于 Streamlit 的交互式界面,支持拖拽上传与隐写前后图像差异对比
  • 命令行接口(CLI):覆盖数据嵌入/提取与水印全流程,适合脚本自动化与批量处理
  • 跨平台部署:支持本地直接运行、conda / pip 环境,以及 Docker 容器化一键启动

🚀 快速开始

环境安装

Conda(推荐)

conda env create -f environment.yml
conda activate StegaPy

pip

pip install -r requirements.txt

Web 界面

streamlit run app.py

启动后在浏览器访问 http://localhost:8501

web


命令行(CLI)

交互模式:无参数启动,菜单引导操作,文件路径支持 Tab 补全。

python cli.py

cli

脚本模式:带参数直接执行,适合自动化调用。

# 隐写嵌入
python cli.py embed -i cover.png -m message.txt -o stego.png
python cli.py embed -i cover.png -m message.txt -o stego.png --algo randlsb -p <密码>

cli-embed

# 数据提取(--algo 须与嵌入时一致)
python cli.py extract -i stego.png -o output/ --algo lsb
python cli.py extract -i stego.png -o output/ --algo randlsb -p <密码>

cli-extract

# 数字水印:生成签名 → 嵌入 → 验证
python cli.py wm generate-sig -o sig.bin -p <密码>
python cli.py wm embed        -i cover.png -s sig.bin -o stego.png -p <密码>
python cli.py wm verify       -i stego.png -s sig.bin -p <密码>

完整参数说明:python cli.py --helppython cli.py embed --help


Docker 部署

docker-compose up -d    # 构建并后台启动
docker-compose ps       # 查看状态
docker-compose down     # 停止并移除

首次启动会自动构建镜像,需要数分钟,完成后访问 http://localhost:8501

docker-build

容器内使用 CLI:docker-compose 已将项目目录挂载至容器 /app

# Web 容器运行时直接进入执行
docker exec stegapy python cli.py embed \
  -i /app/cover.png -m /app/message.txt -o /app/stego.png

# 不依赖 Web 容器的单次运行
docker run --rm -v $(pwd):/app stegapy \
  python cli.py embed -i /app/cover.png -m /app/message.txt -o /app/stego.png

路径均使用容器内路径(/app/...),输出文件写回挂载目录,宿主机可直接访问。


🧪 运行测试

项目提供完整的端到端测试,覆盖 Python API 与 CLI 两层:

# 运行全部测试
pytest tests/test_e2e.py -v

# 只跑某一类
pytest tests/test_e2e.py -v -k "LSB"
pytest tests/test_e2e.py -v -k "CLI"

测试覆盖范围:LSB / RandomLSB / DWT-Dugad 完整嵌入提取往返、AES 加密、PSNR 图像质量断言、密码错误异常、CLI 全子命令。

test-results

-k "LSB" 过滤结果:

test-results-lsb

-k "CLI" 过滤结果:

test-results-cli

📁 项目结构

StegaPy/
├── StegaPy/              # 核心包
│   ├── StegaPy.py        # 主调度类(压缩/加密/插件调用)
│   ├── config.py         # 全局配置
│   ├── plugin_manager.py # 插件注册与查找
│   ├── plugin/           # 算法插件(LSB、RandomLSB、DWT-Dugad)
│   └── util/             # 工具类(图像处理、AES 加密、DWT 变换等)
├── app.py                # Streamlit Web 应用
├── cli.py                # 命令行接口(无参数 = 交互模式,带参数 = 脚本模式)
├── tests/                # 端到端测试(pytest)
├── data/                 # 测试用载体图像与示例文本
├── Dockerfile
├── docker-compose.yml
└── requirements.txt

📄 许可证

本项目采用 GNU 通用公共许可证 v2.0 (GPL-2.0),详见 LICENSE

🙏 致谢

本项目参考 OpenStego 进行重写,感谢原项目作者:

数字水印算法参考:Peter Meerwald, Digital Image Watermarking in the Wavelet Transfer Domain, University of Salzburg, 2001.

📧 联系方式

如有问题或建议,欢迎通过 GitHub Issues 反馈。


本项目仅供学习与合法用途,请勿用于任何违法活动。

About

Python version of OpenStego steganography tool with data hiding and digital watermarking capabilities

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages