torak-en/steganographic-copyright-tool
GitHub: torak-en/steganographic-copyright-tool
基于 JavaFX 的桌面应用,利用 Sobel 边缘检测和 LSB 隐写术将版权与使用许可信息嵌入图像像素并支持后续提取。
Stars: 1 | Forks: 0
# 隐写版权工具
这是我于 Swansea University(斯旺西大学)攻读计算机科学专业最后一年时,独立为毕业论文开发的 JavaFX 桌面应用程序。
该项目探讨了隐写术是否能简化图像版权和许可使用信息的公众识别过程。它允许创作者将版权信息直接嵌入到图像中,并允许其他用户通过简单的图形界面提取这些信息。
在构建网站时,我经常在识别图像所有权和使用权利方面遇到困难,因此选择了这个课题。该应用程序不再单纯依赖可见水印、可移除的元数据或外部反向图像搜索,而是直接将信息存储在图像本身之中。
## 功能
- 将版权或所有权信息嵌入图像
- 添加可选消息
- 从三种使用类别中选择一种:
- 不可使用 (No Use)
- 商业用途 (Commercial Use)
- 免费使用 (Free Use)
- 自动包含嵌入日期
- 提取并显示之前嵌入的信息
- 支持 PNG 和 JPG 图像
- 保存已嵌入信息的图像以供日后使用
- 验证图像类型、尺寸和必填字段
- 将版权和消息数据的总字符数限制在 100 字符以内
- 为完整的嵌入和提取过程提供图形化界面
## 工作原理
该应用程序结合了 Sobel 边缘检测与最低有效位 (Least Significant Bit, LSB) 隐写术。
1. 将图像分解为红、绿、蓝三个颜色通道。
2. 应用 3×3 Gaussian 模糊以减少噪点。
3. 通过 Sobel 滤波计算每个像素的梯度强度和方向。
4. 动态阈值处理用于识别每个颜色通道中的潜在边缘。
5. 选择最强的边缘像素,同时保持它们之间的间距。
6. 将版权数据转换为固定长度的二进制 payload。
7. 将每一位嵌入到所选颜色值的最低有效位中。
8. 在必要时调整周围像素,以保留所选取的梯度。
9. 在提取过程中,会重复执行边缘检测过程,并将存储的位转换回可读信息。
将数据嵌入具有丰富视觉细节的区域,有助于使像素级的更改更难被察觉。
## 嵌入的数据
应用程序存储以下内容:
- 版权或所有者信息
- 可选消息
- 使用权限
- 嵌入日期
版权和消息字段的总长度限制为 100 个字符。完整的 payload 使用 1,746 个 bit 表示,并分布在红、绿、蓝颜色通道中。
## 项目结构
| 类名 | 职责 |
|------------------|------------------------------------------------------------------------|
| `Main` | 构建 JavaFX 界面并处理用户交互 |
| `ImageHandler` | 将界面连接到图像处理算法 |
| `EdgeDetector` | 应用 Gaussian 模糊和 Sobel 边缘检测 |
| `LSBEmbedder` | 将二进制 payload 嵌入到选定的像素中 |
| `LSBExtractor` | 从已嵌入信息的图像中检索 payload |
| `Coordinate` | 存储像素位置和梯度信息 |
| `AlgorithmTests` | 测试不同图像和分辨率下的嵌入与提取过程 |
## 技术栈
- Java
- JavaFX
- IntelliJ IDEA
- Sobel 边缘检测
- Gaussian 滤波
- 最低有效位 (LSB) 隐写术
- 面向对象编程
## 截图
### 嵌入版权信息
上传图像,输入版权详情并选择许可的使用方式。
### 提取版权信息
加载已嵌入信息的图像,以检索其版权、消息、使用权限和嵌入日期。
### 原图与嵌入后图像
该应用程序旨在使原图与嵌入后图像之间的视觉差异难以察觉。
## 运行应用程序
本仓库保留了原始的 IntelliJ IDEA 项目,并包含了开发期间使用的 JavaFX SDK。
该项目的开发环境为:
- JDK 24
- JavaFX 23
- IntelliJ IDEA
运行项目步骤:
1. 克隆或下载本仓库。
2. 在 IntelliJ IDEA 中打开项目文件夹。
3. 允许 IntelliJ 加载现有的项目配置。
4. 检查项目 SDK 是否设置为兼容的 JDK。
5. 检查内置的 JavaFX SDK 是否已配置为项目库。
6. 运行 `dissertationapp` 包中的 `Main` 类。
最初的项目配置是在 Windows 上创建的。如果在另一台计算机上打开该项目,可能需要更新某些 SDK 或模块路径。
### IntelliJ 运行配置
本仓库已包含 JavaFX SDK。在 IntelliJ IDEA 中配置 `Main` 运行配置时,请在 **VM options** 下添加以下内容:
```
--module-path ".\javafx-sdk-23.0.2\lib" --add-modules javafx.controls,javafx.swing
```
## 测试
本项目包含一个算法测试套件,它会:
- 生成随机的版权信息和消息
- 将生成的数据嵌入到测试图像中
- 提取数据并将其与原始输入进行比较
- 在不同的图像分辨率下重复此过程
- 报告任何提取数据与输入不匹配的情况
图形界面也经历了包含有效和无效输入的手动测试,其中包括不支持的文件格式、缺失的必填字段以及超出字符限制的文本。
## 毕业论文
毕业论文记录了该项目背后的研究、设计、实现、测试和评估过程。
[阅读毕业论文](docs/Steganographic-Copyright-Dissertation.pdf)
## 仓库说明
特意保留了内置的 JavaFX SDK,以便仓库能完整保存用于毕业论文的原始开发环境。
这使得该仓库比典型的 Java 项目要大,并且包含了特定于平台的 JavaFX 文件。未来版本的项目可能会使用 Maven 或其他依赖管理系统来替代内置的 SDK。
## 局限性
- 嵌入的信息可能会因调整大小、裁剪、颜色处理或有损压缩而损坏或丢失。
- 嵌入后的输出应保留为 PNG 等无损格式。
- 分辨率、对比度或视觉细节非常低的图像可能没有足够合适的边缘像素。
- 版权和消息字段的总字符数具有 100 个字符的固定限制。
- 当前应用程序一次只能处理一张图像。
- 嵌入的信息未经过加密,不应视为具有法律效力的所有权证明。
- 该方法需要创作者和平台的广泛采用,才能在大规模应用中发挥作用。
## 未来的改进方向
- 使用 Maven 依赖管理替换内置的 JavaFX SDK
- 将应用程序打包为简单的可下载发行版
- 批量嵌入和提取
- 拖拽式图像上传
- 针对嵌入式 payload 的错误检测或校验和
- 提高对压缩和图像编辑的抵抗力
- 改进对细节有限的图像的处理能力
- 该应用程序的 Web 版本
- 自动化的图形界面测试
### 提取版权信息
加载已嵌入信息的图像,以检索其版权、消息、使用权限和嵌入日期。
### 原图与嵌入后图像
该应用程序旨在使原图与嵌入后图像之间的视觉差异难以察觉。
## 运行应用程序
本仓库保留了原始的 IntelliJ IDEA 项目,并包含了开发期间使用的 JavaFX SDK。
该项目的开发环境为:
- JDK 24
- JavaFX 23
- IntelliJ IDEA
运行项目步骤:
1. 克隆或下载本仓库。
2. 在 IntelliJ IDEA 中打开项目文件夹。
3. 允许 IntelliJ 加载现有的项目配置。
4. 检查项目 SDK 是否设置为兼容的 JDK。
5. 检查内置的 JavaFX SDK 是否已配置为项目库。
6. 运行 `dissertationapp` 包中的 `Main` 类。
最初的项目配置是在 Windows 上创建的。如果在另一台计算机上打开该项目,可能需要更新某些 SDK 或模块路径。
### IntelliJ 运行配置
本仓库已包含 JavaFX SDK。在 IntelliJ IDEA 中配置 `Main` 运行配置时,请在 **VM options** 下添加以下内容:
```
--module-path ".\javafx-sdk-23.0.2\lib" --add-modules javafx.controls,javafx.swing
```
## 测试
本项目包含一个算法测试套件,它会:
- 生成随机的版权信息和消息
- 将生成的数据嵌入到测试图像中
- 提取数据并将其与原始输入进行比较
- 在不同的图像分辨率下重复此过程
- 报告任何提取数据与输入不匹配的情况
图形界面也经历了包含有效和无效输入的手动测试,其中包括不支持的文件格式、缺失的必填字段以及超出字符限制的文本。
## 毕业论文
毕业论文记录了该项目背后的研究、设计、实现、测试和评估过程。
[阅读毕业论文](docs/Steganographic-Copyright-Dissertation.pdf)
## 仓库说明
特意保留了内置的 JavaFX SDK,以便仓库能完整保存用于毕业论文的原始开发环境。
这使得该仓库比典型的 Java 项目要大,并且包含了特定于平台的 JavaFX 文件。未来版本的项目可能会使用 Maven 或其他依赖管理系统来替代内置的 SDK。
## 局限性
- 嵌入的信息可能会因调整大小、裁剪、颜色处理或有损压缩而损坏或丢失。
- 嵌入后的输出应保留为 PNG 等无损格式。
- 分辨率、对比度或视觉细节非常低的图像可能没有足够合适的边缘像素。
- 版权和消息字段的总字符数具有 100 个字符的固定限制。
- 当前应用程序一次只能处理一张图像。
- 嵌入的信息未经过加密,不应视为具有法律效力的所有权证明。
- 该方法需要创作者和平台的广泛采用,才能在大规模应用中发挥作用。
## 未来的改进方向
- 使用 Maven 依赖管理替换内置的 JavaFX SDK
- 将应用程序打包为简单的可下载发行版
- 批量嵌入和提取
- 拖拽式图像上传
- 针对嵌入式 payload 的错误检测或校验和
- 提高对压缩和图像编辑的抵抗力
- 改进对细节有限的图像的处理能力
- 该应用程序的 Web 版本
- 自动化的图形界面测试标签:DNS 反向解析, JavaFX, JS文件枚举, LSB, 图像隐写术, 域名枚举, 桌面应用, 蓝队工具, 边缘检测