點擊查看更多
點擊關閉

訪客計數

--- 次訪問

快速統計

15
專案
1
更新
1
活躍專案
3
已完成

本日名言

"你和我是一樣的,艾斯維爾,我們是一張白紙的兩面。"
— 莫夫·奇萊
返回專案列表
已完成 2025年3月 - 2025年3月

StegoApollo - 圖像隱寫術工具

採用 MVP 架構的 C# Windows Forms 隱寫術應用程式,實作四種演算法(LSB、QIM、DCT、Histogram Shift),整合直方圖視覺化、即時日誌記錄與互動式演算法解說功能。

C# Steganography MVP School Project

專案簡介

StegoApollo 是一個Windows Forms 隱寫術工具應用程式,提供在圖片中隱藏與提取訊息的完整解決方案。專案實作四種隱寫演算法(LSB、QIM、DCT、Histogram Shift),採用 MVP (Model-View-Presenter) 架構設計,整合直方圖視覺化、即時日誌記錄與演算法解說功能,適用於資訊安全教學與隱寫技術研究。

核心理念

  • 多演算法支援:LSB(最低有效位元)、QIM(量化索引調變)、DCT(離散餘弦轉換)、Histogram Shift(直方圖位移)
  • 教育導向設計:互動式演算法解說面板、即時操作日誌、直方圖視覺化
  • 模組化架構:Strategy Pattern 設計、服務層與工具層分離、可擴展的介面定義
  • 專業級 UI/UX:進度指示器、錯誤處理機制、一鍵匯出功能

我的職責

作為專案的唯一開發者,我負責:

系統架構設計

  • 設計雙專案架構:StegoLib(類別庫)+ StegoApolloUI(WinForms 應用程式)
  • 實作 Strategy Pattern:IStegoService 介面 + 4 種演算法實作
  • 建立 MVP 架構:MainForm (View) + MainPresenter (Presenter) + StegoLib (Model)
  • 設計服務層與工具層分離:Services/ + Utilities/

核心演算法實作 (StegoLib 類別庫)

  • LsbStegoService (148 行):最低有效位元嵌入與提取
    • 支援 RGB 三通道 1-2 bit 嵌入
    • 前置 4 bytes 記錄訊息長度
    • Unsafe Code 指標操作優化效能
  • QimStegoService (194 行):量化索引調變
    • 灰階通道量化處理
    • Delta 步長可調整(預設 8)
    • 直方圖生成支援
  • DctStegoService (210 行):離散餘弦轉換
    • 頻域嵌入技術
    • 8x8 區塊 DCT 轉換
    • 中頻係數修改
  • HistShiftService (586 行):直方圖位移
    • 可逆資訊隱藏技術
    • Peak/Zero 點選擇演算法
    • 完整的直方圖統計與位移邏輯

工具函式庫開發 (Utilities/)

  • ImageHelper (41 行):圖片載入、儲存、格式轉換
  • HistogramHelper (46 行):灰階直方圖計算與 Bitmap 生成
  • DctUtils (52 行):DCT 與 IDCT 轉換函數
  • LogManager (100 行):分級日誌系統(Info, Warning, Error, Debug)
  • MetadataHelper (79 行):EXIF 元資料讀寫

UI 開發 (Windows Forms)

  • MainForm (708 行 + 919 行 Designer)
    • 圖片選擇與預覽
    • 演算法選擇(ComboBox)
    • 嵌入/提取模式切換
    • 進度條視覺化(ProgressBar)
    • 結果匯出功能
  • LogForm (109 行 + 107 行 Designer)
    • 即時日誌顯示(RichTextBox)
    • 顏色編碼(Info=Black, Warning=Orange, Error=Red)
    • 自動捲動至最新訊息
  • ExplanationForm (27 行 + 59 行 Designer)
    • LSB 演算法解說
    • QIM 演算法解說
    • 互動式切換面板

核心功能

1. LSB (最低有效位元) 隱寫

  • 嵌入演算法
    • 將訊息轉為 UTF-8 bytes
    • 前置 4 bytes 記錄長度(支援最大 4GB 訊息)
    • 遍歷圖片像素的 R、G、B 通道
    • 每個通道最低 1-2 位元替換為訊息位元
    • 容量計算:寬 × 高 × 3 × bitsToUse
  • 提取演算法
    • 讀取前 4 bytes 取得訊息長度
    • 從 RGB 通道提取最低位元
    • 重組為 bytes 並轉為 UTF-8 字串
  • 特色
    • 對人眼幾乎不可見(視覺品質 PSNR > 50dB)
    • 容量大(100KB 圖片可嵌入約 37KB 訊息)
    • 但抗干擾性較弱(壓縮或濾鏡會破壞)

2. QIM (量化索引調變) 隱寫

  • 嵌入演算法
    • 將圖片轉為灰階
    • 量化步長 Delta(預設 8)
    • 訊息 bit = 0 → 量化至偶數倍數
    • 訊息 bit = 1 → 量化至奇數倍數
    • 公式:q = round(pixel / Δ), newPixel = q × Δ + (bit × Δ/2)
  • 提取演算法
    • 計算量化索引 q = round(pixel / Δ)
    • 提取位元 bit = q % 2
  • 特色
    • 較強的抗壓縮能力(JPEG 壓縮後仍可提取)
    • 直方圖視覺化支援
    • 容量較 LSB 小(僅單通道)

3. DCT (離散餘弦轉換) 隱寫

  • 嵌入演算法
    • 將圖片分割為 8×8 區塊
    • 對每個區塊執行 2D DCT 轉換
    • 在中頻係數嵌入訊息(避免低頻與高頻)
    • 執行 IDCT 反轉換
  • 提取演算法
    • 對區塊執行 DCT
    • 從中頻係數提取訊息
  • 特色
    • JPEG 壓縮抗性佳(頻域嵌入)
    • 視覺品質優良
    • 實作複雜度較高

4. Histogram Shift (直方圖位移) 隱寫

  • 嵌入演算法
    • 統計灰階直方圖
    • 選擇 Peak 點(最高頻率)與 Zero 點(頻率為 0)
    • 將 Peak 與 Zero 之間的像素值位移
    • 在 Peak 點嵌入訊息(Peak+1 或維持 Peak)
  • 提取演算法
    • 識別 Peak 點
    • 還原位移像素
    • 完全無損提取
  • 特色
    • 可逆隱寫:提取後可完美還原原圖
    • 容量受限於 Peak 點頻率
    • 適用於醫學影像等需無損還原場景

5. 視覺化與日誌系統

  • 直方圖生成
    • 256 級灰階統計
    • Bitmap 繪製(800×600)
    • 僅支援 QIM 演算法
  • 日誌系統
    • 4 種等級:Info、Warning、Error、Debug
    • 顏色編碼視覺化
    • 即時捲動至最新訊息
    • 記錄操作時間戳
  • 演算法解說
    • LSB 原理說明(位元替換示意圖)
    • QIM 原理說明(量化調變公式)
    • 互動式切換

使用技術

開發框架

  • .NET Framework 4.7.2:目標框架
  • Windows Forms:GUI 框架
  • C# 7.3:程式語言
  • System.Drawing:圖片處理核心函式庫

設計模式

  • Strategy Pattern:IStegoService 介面 + 4 種演算法實作
  • MVP Pattern:Model (StegoLib) + View (MainForm) + Presenter (MainPresenter)
  • Factory Pattern:演算法服務實例化
  • Singleton Pattern:LogManager 全域日誌管理

關鍵技術

  • Unsafe Code:允許不安全程式碼以優化效能

    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
    
  • 指標操作:直接操作 Bitmap 記憶體(BitmapData.Scan0)

  • 泛型與介面:IStegoService<T> 抽象化演算法

  • 事件驅動:IProgress<int> 進度回報

開發工具

  • Visual Studio 2019/2022:IDE
  • Git:版本控制

專案狀態

當前版本:功能完整(develop 分支)

  • 專案結構:雙專案解決方案(StegoLib + StegoApolloUI)

功能完成度

  • 已完成
    • 4 種隱寫演算法(LSB、QIM、DCT、Histogram Shift)
    • Windows Forms 圖形介面
    • 嵌入與提取完整流程
    • 直方圖視覺化(QIM)
    • 即時日誌系統
    • 演算法解說面板
    • 進度指示器
    • PNG 格式匯出
    • 錯誤處理機制
  • 📋 待改進
    • 更多視覺化選項(LSB 通道分離圖)
    • 不支援圖片格式的錯誤處理
    • 單元測試覆蓋率
    • UI/UX 優化

開發挑戰與收穫

1. LSB 演算法實作

挑戰:如何高效地修改像素的最低位元?

解決方案

  • 使用位元運算:(value & ~mask) | (bit << position)
  • 清除目標位元:& ~(1 << b)
  • 設定新位元:| (payloadBit << b)

收穫

  • 深入理解位元運算技巧
  • 掌握 RGB 色彩空間操作
  • 學習訊息長度前置編碼(4 bytes header)

2. QIM 量化索引調變

挑戰:如何在灰階通道實現穩健的嵌入?

解決方案

  • 量化步長 Delta 的選擇(8 為最佳平衡)
  • 奇偶量化:q % 2 決定訊息位元
  • 公式推導:newPixel = round(pixel / Δ) × Δ + bit × Δ/2

收穫

  • 理解量化理論與數位訊號處理
  • 掌握灰階轉換技術
  • 學習抗壓縮隱寫設計

3. Unsafe Code 效能優化

挑戰:SetPixel/GetPixel 效能瓶頸(每次呼叫需 Marshal)。

解決方案

  • 使用 LockBits 鎖定 Bitmap 記憶體
  • 透過指標直接存取像素陣列
  • 批次處理後 UnlockBits 解鎖

效能提升

  • SetPixel/GetPixel:約 100-200 ms/pixel
  • Unsafe Code:< 1 ms/pixel
  • 提升 100-200 倍

收穫

  • 理解 .NET 記憶體管理
  • 掌握 Unsafe Code 最佳實務
  • 學習效能分析與優化

4. Strategy Pattern 應用

挑戰:如何設計可擴展的多演算法架構?

解決方案

  • 定義 IStegoService 介面:

    public interface IStegoService
    {
        StegoResult Embed(Bitmap coverImage, string message, IProgress<int> progress = null);
        StegoResult Extract(Bitmap stegoImage, IProgress<int> progress = null);
    }
    
  • 每個演算法獨立實作介面

  • UI 層透過介面呼叫,無需知道具體實作

收穫

  • 深入理解 Strategy Pattern
  • 掌握依賴反轉原則(DIP)
  • 學習介面驅動開發

5. MVP 架構設計

挑戰:如何分離 UI 邏輯與業務邏輯?

解決方案

  • Model (StegoLib):核心演算法與資料模型
  • View (MainForm):UI 呈現與使用者互動
  • Presenter (MainPresenter):協調 View 與 Model,處理事件

收穫

  • 理解 MVP 與 MVC 差異
  • 掌握 UI 與邏輯分離技巧
  • 提升程式碼可測試性

6. 直方圖視覺化

挑戰:如何將 256 級灰階統計繪製為直方圖?

解決方案

  • 統計每個灰階值的像素數量(陣列 counts[256]
  • 找出最大值作為縮放基準
  • 使用 Graphics.DrawLine 繪製垂直長條

收穫

  • 掌握 GDI+ 繪圖技術
  • 理解直方圖統計原理
  • 學習資料視覺化設計

專案亮點

技術創新

  • ✅ 4 種隱寫演算法完整實作(LSB、QIM、DCT、Histogram Shift)
  • ✅ Unsafe Code 效能優化(100-200 倍提升)
  • ✅ 可逆隱寫支援(Histogram Shift)
  • ✅ Strategy Pattern 優雅設計

教育價值

  • ✅ 互動式演算法解說面板
  • ✅ 即時日誌系統追蹤操作
  • ✅ 直方圖視覺化展示
  • ✅ 4 張螢幕截圖完整工作流程

工程實務

  • ✅ MVP 架構分離 UI 與邏輯
  • ✅ 雙專案解決方案(類別庫 + 應用程式)
  • ✅ 完整的錯誤處理機制
  • ✅ 進度指示器提升使用者體驗

學習成果

  • ✅ 深入實作資訊隱藏技術
  • ✅ 掌握位元運算與指標操作
  • ✅ 理解設計模式實際應用
  • ✅ 學習 WinForms 複雜 UI 開發

應用程式執行截圖