Skip to content

MearaY/StegaPy

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

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors