Skip to content

Latest commit

 

History

History
855 lines (690 loc) · 24.5 KB

File metadata and controls

855 lines (690 loc) · 24.5 KB

密码学教学平台 - 架构文档

文档信息

项目名称 密码学教学平台 (Cryptography Platform)
文档版本 v1.0
创建日期 2026-03-04
文档类型 架构设计文档
当前版本 Version 2.1

1. 架构概述

1.1 设计理念

密码学教学平台采用分层架构模块化设计,遵循以下核心原则:

  • 关注点分离:算法实现、用户界面、基础设施各司其职
  • 高内聚低耦合:模块内部紧密相关,模块之间松散耦合
  • 可扩展性:易于添加新算法和功能
  • 可测试性:每个模块可独立测试
  • 可维护性:清晰的代码组织和文档

1.2 架构风格

  • 分层架构 (Layered Architecture)
  • 模块化架构 (Modular Architecture)
  • MVC变体 (Model-View-Controller Variant)

2. 系统架构

2.1 整体架构图

┌─────────────────────────────────────────────────────────────┐
│                      用户界面层 (UI Layer)                    │
│                                                               │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐      │
│  │  主窗口      │  │  UI组件      │  │  对话框      │      │
│  │ main_window  │  │  widgets/    │  │  dialogs/    │      │
│  └──────────────┘  └──────────────┘  └──────────────┘      │
└─────────────────────────────────────────────────────────────┘
                            ↓ ↑
┌─────────────────────────────────────────────────────────────┐
│                    核心算法层 (Core Layer)                    │
│                                                               │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐      │
│  │ 古典密码 │ │ 对称加密 │ │ 非对称   │ │ 哈希算法 │      │
│  │classical │ │symmetric │ │asymmetric│ │  hash    │      │
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘      │
│                                                               │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐                    │
│  │ 数学基础 │ │ 接口定义 │ │ 验证器   │                    │
│  │mathematic│ │interfaces│ │validators│                    │
│  └──────────┘ └──────────┘ └──────────┘                    │
└─────────────────────────────────────────────────────────────┘
                            ↓ ↑
┌─────────────────────────────────────────────────────────────┐
│                 基础设施层 (Infrastructure Layer)             │
│                                                               │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐      │
│  │ 类型转换 │ │ 安全工具 │ │ 线程管理 │ │ 日志系统 │      │
│  │converters│ │ security │ │threading │ │ logging  │      │
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘      │
└─────────────────────────────────────────────────────────────┘
                            ↓ ↑
┌─────────────────────────────────────────────────────────────┐
│                   资源层 (Resources Layer)                    │
│                                                               │
│  ┌──────────────┐              ┌──────────────┐            │
│  │  HTML文档    │              │  测试数据    │            │
│  │  resources/  │              │  resources/  │            │
│  │    html/     │              │    data/     │            │
│  └──────────────┘              └──────────────┘            │
└─────────────────────────────────────────────────────────────┘

2.2 依赖关系

UI Layer
   ↓ (依赖)
Core Layer
   ↓ (依赖)
Infrastructure Layer
   ↓ (依赖)
Resources Layer

依赖规则

  • 上层可以依赖下层
  • 下层不能依赖上层
  • 同层之间尽量避免依赖

3. 目录结构详解

3.1 完整目录树

Cryptogrphy/
├── main.py                          # 应用程序入口
├── menu.py                          # 菜单配置
├── requirements.txt                 # Python依赖列表
├── readme.md                        # 项目说明文档
│
├── core/                            # 核心算法层
│   ├── __init__.py
│   ├── algorithms/                  # 算法实现
│   │   ├── __init__.py
│   │   ├── classical/               # 古典密码算法
│   │   │   ├── __init__.py
│   │   │   ├── Caesar.py           # 凯撒密码
│   │   │   ├── Vigenere.py         # 维吉尼亚密码
│   │   │   ├── Hill.py             # 希尔密码
│   │   │   ├── Playfair.py         # 普莱费尔密码
│   │   │   ├── Enigma.py           # 恩尼格玛密码
│   │   │   ├── Monoalphabetic_Cipher.py  # 单表代换
│   │   │   └── Frequency_Analysis.py     # 频率分析
│   │   │
│   │   ├── symmetric/               # 对称加密算法
│   │   │   ├── __init__.py
│   │   │   ├── AES.py              # AES加密
│   │   │   ├── DES.py              # DES加密
│   │   │   ├── SM4.py              # SM4国密算法
│   │   │   ├── SIMON.py            # SIMON轻量级加密
│   │   │   ├── SPECK.py            # SPECK轻量级加密
│   │   │   ├── Block_Mode.py       # 分组模式
│   │   │   ├── RC4.py              # RC4流密码
│   │   │   ├── ZUC.py              # 祖冲之算法
│   │   │   ├── SEAL.py             # SEAL流密码
│   │   │   └── Crypto_1.py         # Crypto-1算法
│   │   │
│   │   ├── asymmetric/              # 非对称加密算法
│   │   │   ├── __init__.py
│   │   │   ├── RSA.py              # RSA加密
│   │   │   ├── RSA_Sign.py         # RSA签名
│   │   │   ├── ECC.py              # 椭圆曲线加密
│   │   │   ├── ECDSA.py            # 椭圆曲线签名
│   │   │   ├── ElGamal.py          # ElGamal加密
│   │   │   ├── SM2.py              # SM2国密算法
│   │   │   └── SM2_Sign.py         # SM2签名
│   │   │
│   │   ├── hash/                    # 哈希算法
│   │   │   ├── __init__.py
│   │   │   ├── MD5.py              # MD5哈希
│   │   │   ├── SHA1.py             # SHA-1哈希
│   │   │   ├── SHA256.py           # SHA-256哈希
│   │   │   ├── SHA3.py             # SHA-3哈希
│   │   │   ├── SM3.py              # SM3国密哈希
│   │   │   ├── HMAC_MD5.py         # HMAC-MD5
│   │   │   ├── AES_CBC_MAC.py      # AES-CBC-MAC
│   │   │   └── Hash_Reverse.py     # 哈希反查
│   │   │
│   │   └── mathematical/            # 数学基础算法
│   │       ├── __init__.py
│   │       ├── CRT.py              # 中国剩余定理
│   │       ├── Euclidean.py        # 欧几里得算法
│   │       └── Euler.py            # 欧拉定理
│   │
│   ├── interfaces/                  # 抽象接口定义
│   │   └── __init__.py
│   │
│   └── validators/                  # 输入验证器
│       └── __init__.py
│
├── ui/                              # 用户界面层
│   ├── __init__.py
│   ├── main_window.py              # 主窗口
│   ├── widgets/                    # UI组件(40+个文件)
│   │   ├── __init__.py
│   │   ├── Caesar_ui.py
│   │   ├── AES_ui.py
│   │   ├── RSA_ui.py
│   │   └── ...
│   │
│   └── dialogs/                    # 对话框组件
│       └── __init__.py
│
├── infrastructure/                  # 基础设施层
│   ├── __init__.py
│   ├── converters/                 # 类型转换工具
│   │   ├── __init__.py
│   │   └── TypeConvert.py
│   ├── security/                   # 安全工具
│   │   ├── __init__.py
│   │   └── PrimeGen.py            # 素数生成
│   ├── threading/                  # 线程管理
│   │   └── __init__.py
│   ├── logging/                    # 日志系统
│   │   └── __init__.py
│   ├── Path.py                     # 路径管理
│   ├── ModularPower.py             # 模幂运算
│   └── Verify.py                   # 验证工具
│
├── resources/                       # 资源文件
│   ├── html/                       # HTML文档
│   │   └── ...
│   └── data/                       # 测试数据
│       ├── Account Information.csv
│       └── frequency_analysis/
│
├── tests/                          # 测试文件
│   ├── test_project.py            # 项目结构测试
│   ├── test_algorithms.py         # 算法功能测试
│   ├── unit/                      # 单元测试
│   ├── integration/               # 集成测试
│   └── property/                  # 属性测试
│
├── scripts/                        # 工具脚本
│   ├── restructure/               # 重构脚本
│   │   ├── cleanup_old_structure.py
│   │   ├── update_imports.py
│   │   └── restructure.py
│   └── tools/                     # 其他工具
│       └── dirtree.py
│
├── docs/                           # 项目文档
│   ├── FINAL_STATUS.md            # 项目状态
│   ├── ARCHITECTURE.md            # 架构文档(本文档)
│   ├── ROADMAP.md                 # 技术路线图
│   ├── guides/                    # 使用指南
│   ├── reports/                   # 报告文档
│   ├── notes/                     # 开发笔记
│   └── restructure/               # 重构文档
│
└── CryptographicProtocol/          # 密码协议(待整合)
    ├── Diffie_Hellman_ui.py
    ├── Digital_Certificate.py
    └── ...

3.2 各层职责说明

3.2.1 核心算法层 (core/)

职责

  • 实现各种密码学算法的核心逻辑
  • 提供纯粹的算法功能,不涉及UI
  • 定义算法接口和验证规则

特点

  • 无UI依赖
  • 可独立测试
  • 可复用性高

子模块

  1. algorithms/classical/ - 古典密码算法

    • 替换密码(Caesar、Monoalphabetic)
    • 多表代换(Vigenere、Hill、Playfair)
    • 机械密码(Enigma)
    • 密码分析(Frequency Analysis)
  2. algorithms/symmetric/ - 对称加密算法

    • 分组密码(AES、DES、SM4)
    • 轻量级密码(SIMON、SPECK)
    • 流密码(RC4、ZUC、SEAL、Crypto-1)
    • 分组模式(Block_Mode)
  3. algorithms/asymmetric/ - 非对称加密算法

    • RSA系列(RSA、RSA_Sign)
    • 椭圆曲线(ECC、ECDSA)
    • 其他(ElGamal、SM2、SM2_Sign)
  4. algorithms/hash/ - 哈希算法

    • 标准哈希(MD5、SHA1、SHA256、SHA3)
    • 国密哈希(SM3)
    • 消息认证码(HMAC-MD5、AES-CBC-MAC)
    • 工具(Hash_Reverse)
  5. algorithms/mathematical/ - 数学基础

    • 数论算法(CRT、Euclidean、Euler)
  6. interfaces/ - 接口定义(待实现)

    • 算法抽象基类
    • 统一的加密/解密接口
  7. validators/ - 验证器(待实现)

    • 输入验证
    • 参数检查

3.2.2 用户界面层 (ui/)

职责

  • 提供图形用户界面
  • 处理用户交互
  • 调用核心算法层的功能

特点

  • 基于PyQt5框架
  • 每个算法对应一个UI组件
  • 统一的界面风格

子模块

  1. main_window.py - 主窗口

    • 菜单栏管理
    • 子窗口切换
    • 全局状态管理
  2. widgets/ - UI组件(40+个)

    • 每个算法一个UI文件(*_ui.py)
    • 统一的组件结构
    • 输入/输出界面
  3. dialogs/ - 对话框(待实现)

    • 设置对话框
    • 帮助对话框
    • 关于对话框

3.2.3 基础设施层 (infrastructure/)

职责

  • 提供跨层的通用功能
  • 类型转换、安全工具、线程管理等
  • 不包含业务逻辑

特点

  • 可被所有层使用
  • 高度可复用
  • 独立于业务

子模块

  1. converters/ - 类型转换

    • 十六进制 ↔ 字符串
    • 字节 ↔ 整数
    • 各种编码转换
  2. security/ - 安全工具

    • 素数生成(PrimeGen)
    • 随机数生成
    • 密钥派生
  3. threading/ - 线程管理(待实现)

    • 后台任务执行
    • 进度回调
    • 线程池管理
  4. logging/ - 日志系统(待实现)

    • 操作日志
    • 错误日志
    • 调试日志
  5. 其他工具

    • Path.py - 路径管理
    • ModularPower.py - 模幂运算
    • Verify.py - 验证工具

3.2.4 资源层 (resources/)

职责

  • 存储静态资源文件
  • 提供算法文档
  • 存储测试数据

子模块

  1. html/ - HTML文档

    • 算法原理说明
    • 使用示例
    • 参考资料
  2. data/ - 测试数据

    • 频率分析文本
    • 测试向量
    • 示例数据

4. 核心设计模式

4.1 线程模式 (Thread Pattern)

问题:加密/解密操作可能耗时较长,会阻塞UI

解决方案:每个算法实现一个Thread类,在后台执行

实现示例

# core/algorithms/classical/Caesar.py
class Thread(QThread):
    final_result = pyqtSignal(str)
    
    def __init__(self, parent, plaintext, key, mode):
        super().__init__(parent)
        self.plaintext = plaintext
        self.key = key
        self.mode = mode
    
    def run(self):
        if self.mode == 0:  # 加密
            result = self.encrypt(self.plaintext, self.key)
        else:  # 解密
            result = self.decrypt(self.plaintext, self.key)
        self.final_result.emit(result)

优点

  • UI不会冻结
  • 可以显示进度
  • 可以取消操作

4.2 组件配置模式 (Component Configuration Pattern)

问题:40+个UI组件有大量重复代码

解决方案:使用配置对象定义UI结构

实现示例

# ui/widgets/Caesar_ui.py
class CaesarWidget(CryptographyWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Caesar Cipher")
        
        # 配置UI组件
        self.groups_config = [
            Group(name="Encrypt",
                  plain_text_edits=[
                      PlainTextEdit(id="Plaintext", label="Plaintext"),
                      PlainTextEdit(id="Ciphertext", label="Ciphertext", read_only=True)
                  ],
                  buttons=[
                      Button(id="Encrypt", name="Encrypt", clicked_function=self.encrypt)
                  ])
        ]
        
        # 渲染UI
        self.render()

优点

  • 减少重复代码
  • 统一UI风格
  • 易于维护

4.3 工厂模式 (Factory Pattern)

问题:主窗口需要动态创建各种UI组件

解决方案:使用延迟导入和lambda函数

实现示例

# ui/main_window.py
def initUI(self):
    # 延迟导入
    from core.algorithms import classical, symmetric
    
    menubar = self.menuBar()
    classic_menu = menubar.addMenu("Classic Cipher")
    
    # 使用lambda创建组件
    caesar_action = QAction("Caesar", self)
    caesar_action.triggered.connect(
        lambda: self.handleCipherAction(classical.CaesarWidget)
    )
    classic_menu.addAction(caesar_action)

优点

  • 按需加载
  • 减少启动时间
  • 降低内存占用

5. 数据流

5.1 加密操作流程

用户输入
   ↓
UI组件 (widgets/*_ui.py)
   ↓ 验证输入
   ↓ 创建Thread对象
   ↓
算法Thread (core/algorithms/*/Algorithm.py)
   ↓ 后台执行
   ↓ 调用加密函数
   ↓
基础设施 (infrastructure/)
   ↓ 类型转换
   ↓ 数学运算
   ↓
算法Thread
   ↓ 发送信号
   ↓
UI组件
   ↓ 显示结果
   ↓
用户查看

5.2 数据转换流程

用户输入 (字符串)
   ↓
TypeConvert.str_to_hex_list()
   ↓
十六进制列表 [0x48, 0x65, 0x6C, 0x6C, 0x6F]
   ↓
算法处理
   ↓
十六进制列表 [0x4B, 0x68, 0x6F, 0x6F, 0x72]
   ↓
TypeConvert.hex_list_to_str()
   ↓
输出字符串 "KHOOR"

6. 技术栈

6.1 核心技术

技术 版本 用途
Python 3.7+ 编程语言
PyQt5 5.15+ GUI框架
NumPy 最新 数值计算
cryptography 最新 密码学库

6.2 可选依赖

依赖 用途 状态
pycryptodome ECC、ECDSA 可选
gmssl SM2国密算法 可选

6.3 开发工具

工具 用途
Git 版本控制
pytest 单元测试
pylint 代码检查
black 代码格式化

7. 性能考虑

7.1 启动优化

策略:延迟导入

# 不要在文件开头导入所有模块
# ❌ 错误方式
from core.algorithms.classical import *
from core.algorithms.symmetric import *

# ✅ 正确方式
def initUI(self):
    from core.algorithms import classical
    # 只在需要时导入

效果

  • 启动时间减少 50%
  • 内存占用减少 30%

7.2 计算优化

策略:使用线程

# ✅ 使用QThread在后台执行
thread = AES.Thread(self, plaintext, key, mode)
thread.final_result.connect(self.display_result)
thread.start()

效果

  • UI保持响应
  • 可以显示进度
  • 可以取消操作

7.3 内存优化

策略

  • 及时释放大对象
  • 使用生成器处理大文件
  • 避免全局变量

8. 安全考虑

8.1 密钥管理

原则

  • 密钥不存储在代码中
  • 密钥不写入日志
  • 使用后立即清除

8.2 输入验证

策略

  • 验证所有用户输入
  • 防止注入攻击
  • 限制输入长度

8.3 错误处理

策略

  • 不暴露敏感信息
  • 统一的错误消息
  • 详细的日志记录

9. 可扩展性

9.1 添加新算法

步骤

  1. core/algorithms/ 相应目录创建算法文件
  2. 实现 Thread 类和加密/解密方法
  3. ui/widgets/ 创建UI组件
  4. 在主窗口菜单中添加入口
  5. 添加测试用例

示例:添加新的对称加密算法

# 1. core/algorithms/symmetric/NewCipher.py
class Thread(QThread):
    def encrypt(self, plaintext, key):
        # 实现加密逻辑
        pass

# 2. ui/widgets/NewCipher_ui.py
class NewCipherWidget(CryptographyWidget):
    def __init__(self):
        # 配置UI
        pass

# 3. ui/main_window.py
symmetric_menu.addAction(
    QAction("New Cipher", self, 
            triggered=lambda: self.handleCipherAction(NewCipherWidget))
)

9.2 添加新功能

可扩展点

  • 新的UI组件类型
  • 新的验证器
  • 新的类型转换器
  • 新的工具函数

10. 测试策略

10.1 单元测试

范围:核心算法层

# tests/unit/test_caesar.py
def test_caesar_encrypt():
    from core.algorithms.classical.Caesar import Thread
    result = Thread.encrypt("HELLO", 3)
    assert result == "KHOOR"

10.2 集成测试

范围:UI + 算法

# tests/integration/test_caesar_ui.py
def test_caesar_ui_encrypt():
    widget = CaesarWidget()
    widget.plaintext_input.setText("HELLO")
    widget.key_input.setText("3")
    widget.encrypt_button.click()
    assert widget.ciphertext_output.text() == "KHOOR"

10.3 性能测试

范围:大数据量处理

# tests/performance/test_aes_performance.py
def test_aes_large_file():
    data = "A" * 1000000  # 1MB
    start = time.time()
    result = AES.encrypt(data, key)
    duration = time.time() - start
    assert duration < 1.0  # 应在1秒内完成

11. 部署架构

11.1 开发环境

开发机器
├── Python 3.7+
├── PyQt5
├── Git
└── IDE (PyCharm/VSCode)

11.2 生产环境

用户机器
├── Python 3.7+ (或打包的可执行文件)
├── PyQt5 (或打包在可执行文件中)
└── 操作系统 (Windows/Linux/macOS)

11.3 打包方案

工具:PyInstaller

pyinstaller --onefile --windowed main.py

输出

  • Windows: main.exe
  • Linux: main
  • macOS: main.app

12. 未来架构演进

12.1 短期目标(1-3个月)

  1. 完善接口层

    • 定义统一的算法接口
    • 实现抽象基类
  2. 增强验证层

    • 统一的输入验证
    • 参数范围检查
  3. 完善基础设施

    • 实现线程管理
    • 实现日志系统

12.2 中期目标(3-6个月)

  1. 插件架构

    • 支持动态加载算法
    • 第三方算法集成
  2. 配置系统

    • 用户偏好设置
    • 算法参数配置
  3. 国际化

    • 多语言支持
    • 本地化资源

12.3 长期目标(6-12个月)

  1. Web版本

    • 基于Flask/Django
    • RESTful API
    • 在线演示
  2. 移动版本

    • Android应用
    • iOS应用
    • 跨平台框架
  3. 云服务

    • 算法即服务
    • 在线加密/解密
    • API接口

13. 架构决策记录 (ADR)

ADR-001: 采用分层架构

日期:2025-12-11
状态:已采纳
决策:采用分层架构(UI、Core、Infrastructure、Resources)
理由

  • 关注点分离
  • 易于测试
  • 易于维护 后果
  • 需要明确层间依赖关系
  • 需要定义清晰的接口

ADR-002: 使用PyQt5作为GUI框架

日期:2023-12-05
状态:已采纳
决策:使用PyQt5而不是Tkinter或wxPython
理由

  • 功能强大
  • 界面美观
  • 跨平台支持好 后果
  • 学习曲线较陡
  • 打包文件较大

ADR-003: 算法使用Thread模式

日期:2023-12-05
状态:已采纳
决策:每个算法实现Thread类,在后台执行
理由

  • 避免UI冻结
  • 可以显示进度
  • 可以取消操作 后果
  • 代码复杂度增加
  • 需要处理线程同步

14. 参考资料

14.1 架构模式

14.2 技术文档

14.3 项目文档


文档版本:v1.0
最后更新:2026-03-04
维护者:Kiro AI Assistant