A-RYAN-KR/Steganography
GitHub: A-RYAN-KR/Steganography
一款支持图像、音频、视频三种载体的多模态隐写应用,结合 LSB 编码与可选 AES-256 加密,在媒体文件中安全隐藏和提取文本、图像或音频数据。
Stars: 0 | Forks: 0
# 🔐 StegaVault
### *多模态隐写与密码学套件*
[](https://www.python.org/)
[](https://streamlit.io/)
[](#)
[](LICENSE)
**StegaVault** 是一款高端、高安全性的多模态隐写应用,旨在将敏感 payload 数据(文本、图像或音频)隐藏在各种载体文件(图像、音频或视频)中,并内置 AES-256 加密。
[核心功能](#-key-features) • [预览](#-application-preview) • [系统架构](#-system-architecture) • [协议](#-steganography-headers--protocol) • [安装说明](#-installation--setup)
## 📸 应用预览
以下是采用玻璃拟态设计的自定义深色主题 Streamlit 用户界面预览:
### 🏠 主仪表盘

### 📤 编码与隐藏 Payload

### 📥 解码与提取 Payload

## 🌟 核心功能
* **⚡ 多模态功能**:支持将任意 payload(文本、图像、音频)嵌入到以下载体中:
* **图像**:无损的 PNG/BMP LSB 编码。
* **音频**:支持采样宽度感知打包的 WAV LSB 编码。
* **视频**:逐帧 LSB 编码,使用 AVI 包装器内的 `FFV1` 编解码器进行无损保留。
* **🔒 AES-256 加密(可选)**:payload 在嵌入前会进行安全保护。使用 **SHA-256** 从用户密码中派生密钥,并使用带有 PKCS7 填充的 **AES-256-CBC** 进行加密。
* **⚖️ 容量验证**:实时容量计算,在编码前检查载体大小与 payload 大小的对比,如果超出限制会警告用户。
* **👁️ 不可见性检查器**:并排比较原始载体和隐写载体,并在适用时提供 PSNR 计算。
* **📁 智能提取**:自动解析标头以识别 payload 格式,并提供内联预览(渲染的文本、图像或音频播放器)和下载按钮。
## 📐 系统架构
StegaVault 采用模块化结构,将 UI 组件与底层的隐写引擎分离开来:
```
Steganography/
├── app.py # Streamlit entry point, layout, and page routing
├── requirements.txt # Package dependencies
├── core/
│ ├── __init__.py
│ ├── engine.py # Unified encoding/decoding orchestrator
│ ├── crypto.py # AES-256 encryption/decryption utilities
│ ├── image_steg.py # LSB image embedding and recovery
│ ├── audio_steg.py # LSB audio sample manipulation
│ ├── video_steg.py # LSB video frame manipulation via OpenCV
│ └── utils.py # Binary parsing and header preparation helpers
└── ui/
├── __init__.py
└── styles.py # Custom CSS styling (dark glassmorphism, badges, banners)
```
## 📥 隐写标头与协议
为了在不知道数据大小或格式的情况下允许自动提取,StegaVault 会在每个隐写载体的开头嵌入一个 **40 位自定义元数据标头**:
| 组件 | 偏移量 (位) | 大小 | 描述 |
| :--- | :--- | :--- | :--- |
| **数据类型** | `0 - 7` | 8 位 | 标识 payload 类型:`0x01` = 文本,`0x02` = 图像,`0x03` = 音频。 |
| **Payload 长度** | `8 - 39` | 32 位 | 指定 payload 大小(以字节为单位)的无符号整数。 |
| **加密的 Payload** | `40+` | 可变 | 实际的 payload 字节(可能经过 AES-256 加密)。 |
## 🛠️ 载体模块与技术栈
🔍 展开查看载体模块详情
### 1. 图像载体 (`core/image_steg.py`) - 在扁平化像素数组的 RGB 通道上进行标准 LSB(最低有效位)替换。 - 高容量载体。 - 使用 `PIL` 和 `NumPy` 对图像通道进行高效的扁平化和重塑。 ### 2. 音频载体 (`core/audio_steg.py`) - 在原始音频样本中进行 LSB 替换。 - 支持 **8 位无符号**和 **16 位有符号** WAV 格式。 - 正确处理 16 位音频中的负值,防止播放期间出现失真或噪声问题。 ### 3. 视频载体 (`core/video_steg.py`) - 跨像素通道执行逐帧隐写。 - 采用 **FFV1** 视频编解码器(一种无损帧内压缩标准),确保常规的视频压缩不会破坏 payload 位。 - 由 OpenCV (`cv2`) 提供支持,用于帧检索、打包和重组。 ### 4. 密码学 (`core/crypto.py`) - 通过 **SHA-256** 从用户输入中派生 256 位密钥。 - 为 AES CBC 模式使用加密安全的随机 **16 字节初始化向量 (IV)**。 - 输出字节布局:`IV (16 字节)` 后跟 `Ciphertext`。标签:DNS 反向解析, HTTP工具, Kubernetes, Python, Streamlit, 信息加密, 密码学, 手动系统调用, 数据隐藏, 无后门, 访问控制, 逆向工具, 隐写术