charan12309/CyberStegoApp

GitHub: charan12309/CyberStegoApp

一款基于 Android 的隐写术应用,用于在图片中嵌入和提取 AES 加密的隐藏消息。

Stars: 0 | Forks: 0

# 🔐 CyberStegoApp — Android 图片隐写术(Java) ## 📱 功能介绍 StegoApp 允许您将秘密消息嵌入图片中。消息先经过 AES 加密,然后使用最低有效位(LSB)技术逐位写入像素数据。使用相同密钥时,可提取密文并解密还原原始消息。 主要功能: - 登录/注册(会话持久化存储于 SharedPreferences) - 选项卡:嵌入、提取、用户信息 - 将隐写图片分享到其他应用 - 通过用户信息页删除账户 - 摇一摇注销功能(基于加速度计) ## 🏗️ 项目结构 ``` com.example.stegoapp │ ├── LoginActivity.java // Login + auto-redirect if already logged in ├── SignupActivity.java // New user registration ├── MainActivity.java // Tabs: Embedding / Extraction / User info │ ├── ui/ │ ├── EmbeddingFragment.java // Pick image → encrypt → center-crop square → embed → save/share │ ├── ExtractionFragment.java // Pick image → center-crop square → extract → decrypt │ └── UserInfoFragment.java // Show username/password, logout, delete account │ ├── crypto/CryptoUtils.java // AES-128 (ECB/PKCS5Padding), 16-byte normalized key ├── stego/StegoUtils.java // LSB embed/extract, 32-bit length header, center-square ├── util/ImageUtils.java // Software ARGB_8888 decode + PNG save (MediaStore) ├── util/ExecutorProvider.java // Shared single-thread executor for DB work │ ├── data/ │ ├── AppDatabase.java // Room database (users table), singleton │ ├── User.java // Room entity: username (PK, non-null), password (plain for demo) │ └── UserDao.java // DAO: insert/find/deleteByUsername │ └── res/layout/... // activity_main, fragment_* and auth screens ``` ## 🔄 应用流程 ``` Launch └─► LoginActivity ├─► [session exists] ───────────► MainActivity (tabs) └─► [no session] login or signup MainActivity (Tabs) ├─► Embedding │ 1) Pick image (any format; saved as PNG) │ 2) Enter message + key │ 3) AES encrypt → center-square crop → LSB embed │ 4) Save or Share (document share to avoid recompression) │ ├─► Extraction │ 1) Pick image (recommend PNG) │ 2) Center-square crop → read bits → AES decrypt │ 3) Show message (errors if image was recompressed) │ └─► User info - View username/password (demo) - Logout - Delete account (removes current user + logs out) ``` ## 🖼️ 隐写技术 ### 中心正方形 + LSB - 若所选图片为矩形(如 1600×900),应用会裁剪出**中心正方形**区域(900×900)。 - 嵌入操作从该正方形的第一个像素开始(即原图区域的视觉中心点)。 - 每个像素通过**蓝色通道最低有效位**贡献一个比特位。 ### 数据格式 ``` [4 bytes: payload bit length] [N bytes: AES ciphertext] ``` ### 容量计算 - 可用比特数 = (正方形宽度 × 正方形高度) − 32 - 可用字节数 ≈ 可用比特数 ÷ 8 向下取整 ## 🔑 加密机制 | 属性 | 值 | |------------|--------------| | 算法 | AES | | 模式 | ECB | | 填充方式 | PKCS5 | | 密钥长度 | 128 位(16 字节) | | 密钥处理 | 输入为 UTF-8;用零填充或截断至 16 字节 | | 初始化向量 | 无(ECB 模式) | 注意:本演示为简化使用 ECB 模式。若需更高安全性,建议采用 AES-GCM 并存储初始化向量(需修改提取格式)。 ## 🗄️ 数据库与会话 - Room 数据表 `users`: - `username`(文本型,主键,非空) - `password`(文本型,仅用于演示——生产环境请勿使用明文) - 会话管理通过 `SharedPreferences`: - `logged_user` → 当前用户名或空值 ## 📤 分享注意事项 部分应用(如 WhatsApp 图片分享)会**重新压缩**图片,导致 LSB 数据损坏。StegoApp 的分享功能使用通用 MIME 类型(`*/*`),使目标应用将其视为**文档**处理,从而保留 PNG 字节完整性。提取时若检测到无效长度头或容量不匹配,应用会提示未发现隐藏数据(可能已被重新压缩)。 ## 🛠️ 技术栈 | 组件 | 技术 | |------------|--------------| | 编程语言 | Java | | 最低/目标 SDK | 24 / 34 | | 构建工具 | Gradle 8.5, AGP 8.3 | | 数据库 | Room (SQLite) | | 加密库 | `javax.crypto` | | 会话管理 | SharedPreferences | | 用户界面 | AppCompat + Material Components | ## 🚀 环境搭建 1. 在 Android Studio 中打开项目。 2. 确保 Gradle 使用 JDK 17(或 Gradle 8.5+ 使用 JDK 21)。 3. 同步项目后在模拟器/设备(API 24+)上运行。 在 Android 10+ 系统中使用系统选择器选取图片时无需存储权限。保存 PNG 使用 MediaStore 实现。 ## 🧪 快速测试 1. 注册用户 → 登录。 2. 切换到「嵌入」选项卡 → 选择图片 → 输入消息和密钥 → 点击嵌入。 3. 保存或分享生成的隐写图片。 4. 切换到「提取」选项卡 → 选择已保存/分享的图片 → 输入密钥 → 点击解密。 5. 若图片未被重新压缩,将显示隐藏消息。 ## ⚠️ 注意事项 - 使用 PNG 格式或「文档」分享方式可避免重新压缩。JPEG/WebP 可能破坏隐藏比特位。 - 为演示简化,密码以明文存储——生产环境请勿使用此方式。 - 中心正方形裁剪会影响输出尺寸;保存的隐写图片即为裁剪后的正方形区域。 基于 LSB + AES 技术构建的简洁高效 Android 隐写术演示应用。
标签:AES加密, Android应用, Java开发, JS文件枚举, LSB隐写, meg, Room数据库, SharedPreferences, 信息安全, 分享功能, 加密工具, 后台面板检测, 图像处理, 域名枚举, 安全应用, 摇晃控制, 数据隐藏, 活动日志, 用户认证, 目录枚举, 移动安全, 移动应用开发, 证据删除, 隐写工具, 隐写术