| 项目名称 | 密码学教学平台 (Cryptography Platform) |
|---|---|
| 文档版本 | v1.0 |
| 创建日期 | 2026-03-04 |
| 文档类型 | 架构设计文档 |
| 当前版本 | Version 2.1 |
密码学教学平台采用分层架构和模块化设计,遵循以下核心原则:
- 关注点分离:算法实现、用户界面、基础设施各司其职
- 高内聚低耦合:模块内部紧密相关,模块之间松散耦合
- 可扩展性:易于添加新算法和功能
- 可测试性:每个模块可独立测试
- 可维护性:清晰的代码组织和文档
- 分层架构 (Layered Architecture)
- 模块化架构 (Modular Architecture)
- MVC变体 (Model-View-Controller Variant)
┌─────────────────────────────────────────────────────────────┐
│ 用户界面层 (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/ │ │
│ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
UI Layer
↓ (依赖)
Core Layer
↓ (依赖)
Infrastructure Layer
↓ (依赖)
Resources Layer
依赖规则:
- 上层可以依赖下层
- 下层不能依赖上层
- 同层之间尽量避免依赖
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
└── ...
职责:
- 实现各种密码学算法的核心逻辑
- 提供纯粹的算法功能,不涉及UI
- 定义算法接口和验证规则
特点:
- 无UI依赖
- 可独立测试
- 可复用性高
子模块:
-
algorithms/classical/ - 古典密码算法
- 替换密码(Caesar、Monoalphabetic)
- 多表代换(Vigenere、Hill、Playfair)
- 机械密码(Enigma)
- 密码分析(Frequency Analysis)
-
algorithms/symmetric/ - 对称加密算法
- 分组密码(AES、DES、SM4)
- 轻量级密码(SIMON、SPECK)
- 流密码(RC4、ZUC、SEAL、Crypto-1)
- 分组模式(Block_Mode)
-
algorithms/asymmetric/ - 非对称加密算法
- RSA系列(RSA、RSA_Sign)
- 椭圆曲线(ECC、ECDSA)
- 其他(ElGamal、SM2、SM2_Sign)
-
algorithms/hash/ - 哈希算法
- 标准哈希(MD5、SHA1、SHA256、SHA3)
- 国密哈希(SM3)
- 消息认证码(HMAC-MD5、AES-CBC-MAC)
- 工具(Hash_Reverse)
-
algorithms/mathematical/ - 数学基础
- 数论算法(CRT、Euclidean、Euler)
-
interfaces/ - 接口定义(待实现)
- 算法抽象基类
- 统一的加密/解密接口
-
validators/ - 验证器(待实现)
- 输入验证
- 参数检查
职责:
- 提供图形用户界面
- 处理用户交互
- 调用核心算法层的功能
特点:
- 基于PyQt5框架
- 每个算法对应一个UI组件
- 统一的界面风格
子模块:
-
main_window.py - 主窗口
- 菜单栏管理
- 子窗口切换
- 全局状态管理
-
widgets/ - UI组件(40+个)
- 每个算法一个UI文件(*_ui.py)
- 统一的组件结构
- 输入/输出界面
-
dialogs/ - 对话框(待实现)
- 设置对话框
- 帮助对话框
- 关于对话框
职责:
- 提供跨层的通用功能
- 类型转换、安全工具、线程管理等
- 不包含业务逻辑
特点:
- 可被所有层使用
- 高度可复用
- 独立于业务
子模块:
-
converters/ - 类型转换
- 十六进制 ↔ 字符串
- 字节 ↔ 整数
- 各种编码转换
-
security/ - 安全工具
- 素数生成(PrimeGen)
- 随机数生成
- 密钥派生
-
threading/ - 线程管理(待实现)
- 后台任务执行
- 进度回调
- 线程池管理
-
logging/ - 日志系统(待实现)
- 操作日志
- 错误日志
- 调试日志
-
其他工具
- Path.py - 路径管理
- ModularPower.py - 模幂运算
- Verify.py - 验证工具
职责:
- 存储静态资源文件
- 提供算法文档
- 存储测试数据
子模块:
-
html/ - HTML文档
- 算法原理说明
- 使用示例
- 参考资料
-
data/ - 测试数据
- 频率分析文本
- 测试向量
- 示例数据
问题:加密/解密操作可能耗时较长,会阻塞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不会冻结
- 可以显示进度
- 可以取消操作
问题: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风格
- 易于维护
问题:主窗口需要动态创建各种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)优点:
- 按需加载
- 减少启动时间
- 降低内存占用
用户输入
↓
UI组件 (widgets/*_ui.py)
↓ 验证输入
↓ 创建Thread对象
↓
算法Thread (core/algorithms/*/Algorithm.py)
↓ 后台执行
↓ 调用加密函数
↓
基础设施 (infrastructure/)
↓ 类型转换
↓ 数学运算
↓
算法Thread
↓ 发送信号
↓
UI组件
↓ 显示结果
↓
用户查看
用户输入 (字符串)
↓
TypeConvert.str_to_hex_list()
↓
十六进制列表 [0x48, 0x65, 0x6C, 0x6C, 0x6F]
↓
算法处理
↓
十六进制列表 [0x4B, 0x68, 0x6F, 0x6F, 0x72]
↓
TypeConvert.hex_list_to_str()
↓
输出字符串 "KHOOR"
| 技术 | 版本 | 用途 |
|---|---|---|
| Python | 3.7+ | 编程语言 |
| PyQt5 | 5.15+ | GUI框架 |
| NumPy | 最新 | 数值计算 |
| cryptography | 最新 | 密码学库 |
| 依赖 | 用途 | 状态 |
|---|---|---|
| pycryptodome | ECC、ECDSA | 可选 |
| gmssl | SM2国密算法 | 可选 |
| 工具 | 用途 |
|---|---|
| Git | 版本控制 |
| pytest | 单元测试 |
| pylint | 代码检查 |
| black | 代码格式化 |
策略:延迟导入
# 不要在文件开头导入所有模块
# ❌ 错误方式
from core.algorithms.classical import *
from core.algorithms.symmetric import *
# ✅ 正确方式
def initUI(self):
from core.algorithms import classical
# 只在需要时导入效果:
- 启动时间减少 50%
- 内存占用减少 30%
策略:使用线程
# ✅ 使用QThread在后台执行
thread = AES.Thread(self, plaintext, key, mode)
thread.final_result.connect(self.display_result)
thread.start()效果:
- UI保持响应
- 可以显示进度
- 可以取消操作
策略:
- 及时释放大对象
- 使用生成器处理大文件
- 避免全局变量
原则:
- 密钥不存储在代码中
- 密钥不写入日志
- 使用后立即清除
策略:
- 验证所有用户输入
- 防止注入攻击
- 限制输入长度
策略:
- 不暴露敏感信息
- 统一的错误消息
- 详细的日志记录
步骤:
- 在
core/algorithms/相应目录创建算法文件 - 实现 Thread 类和加密/解密方法
- 在
ui/widgets/创建UI组件 - 在主窗口菜单中添加入口
- 添加测试用例
示例:添加新的对称加密算法
# 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))
)可扩展点:
- 新的UI组件类型
- 新的验证器
- 新的类型转换器
- 新的工具函数
范围:核心算法层
# tests/unit/test_caesar.py
def test_caesar_encrypt():
from core.algorithms.classical.Caesar import Thread
result = Thread.encrypt("HELLO", 3)
assert result == "KHOOR"范围: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"范围:大数据量处理
# 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秒内完成开发机器
├── Python 3.7+
├── PyQt5
├── Git
└── IDE (PyCharm/VSCode)
用户机器
├── Python 3.7+ (或打包的可执行文件)
├── PyQt5 (或打包在可执行文件中)
└── 操作系统 (Windows/Linux/macOS)
工具:PyInstaller
pyinstaller --onefile --windowed main.py输出:
- Windows: main.exe
- Linux: main
- macOS: main.app
-
完善接口层
- 定义统一的算法接口
- 实现抽象基类
-
增强验证层
- 统一的输入验证
- 参数范围检查
-
完善基础设施
- 实现线程管理
- 实现日志系统
-
插件架构
- 支持动态加载算法
- 第三方算法集成
-
配置系统
- 用户偏好设置
- 算法参数配置
-
国际化
- 多语言支持
- 本地化资源
-
Web版本
- 基于Flask/Django
- RESTful API
- 在线演示
-
移动版本
- Android应用
- iOS应用
- 跨平台框架
-
云服务
- 算法即服务
- 在线加密/解密
- API接口
日期:2025-12-11
状态:已采纳
决策:采用分层架构(UI、Core、Infrastructure、Resources)
理由:
- 关注点分离
- 易于测试
- 易于维护 后果:
- 需要明确层间依赖关系
- 需要定义清晰的接口
日期:2023-12-05
状态:已采纳
决策:使用PyQt5而不是Tkinter或wxPython
理由:
- 功能强大
- 界面美观
- 跨平台支持好 后果:
- 学习曲线较陡
- 打包文件较大
日期:2023-12-05
状态:已采纳
决策:每个算法实现Thread类,在后台执行
理由:
- 避免UI冻结
- 可以显示进度
- 可以取消操作 后果:
- 代码复杂度增加
- 需要处理线程同步
- FINAL_STATUS.md - 项目状态
- ROADMAP.md - 技术路线图
- readme.md - 项目说明
文档版本:v1.0
最后更新:2026-03-04
维护者:Kiro AI Assistant