1307 字
7 分钟
SFC 开发日志(一):AES 原型、模块划分与 .sy 格式雏形

项目仓库: Gitee | GitHub

开发 AES-128 原型、目录读取、文件头写入、偏移量定位和 Huffman 树序列化。 .sy协议:文件系统信息写进二进制文件,读取器按同一规则读回。涉及的主要模块有:文件头、目录块、数据区、定位工具和读取器。

2025 年 9 月 29 日到 2025 年 10 月 5 日:AES 原型与密钥入口#

开发 Aes.cppAes.h。首先实现主逻辑,接着补齐密钥对齐。密码入口采用 SHA-256 派生,再截取前 16 字节作为 AES-128 密钥。AES 模块内部只处理 128 位密钥。

void SubBytes(state_t &state);
void ShiftRows(state_t &state);
void MixColumns(state_t &state);
void AddRoundKey(state_t &state);

AES 初版使用 ECB。由于系统尚未引入目录块、数据块、偏移量、IV 和文件头,目前仅做实验性实现

2025 年 10 月 11 日到 2025 年 10 月 18 日:结构设计与并发架构的设计(虽然最后并未使用)#

代码从单文件算法实验转向模块化结构。目录内出现 SchedulerThreadPoolTaskQueueDataInteraction 等名称,职责划分也随之明确:调度层负责组织流程,压缩与加密模块只处理字节流,数据交互层负责把文件系统内容转成模块输入。

线程池和任务队列先以接口形式落位。主流程没有并入并发执行,但 TaskMonitor、条件变量、队列和销毁逻辑已经编写完成。主流程保持单线程时使用同一份数据交换结构,并发分支接入时也不需要重写。

模块化设计把压缩与加密拆开。目录树读取器、文件头写入器、数据块读取器被划入协议层。协议层与算法层分离后,Huffman、AES、GUI 共享同一份文件系统结构。

2025 年 10 月 21 日到 2025 年 10 月 30 日:工具类与偏移量#

CompressionModules/heffman 负责 Huffman,EncryptionModules/aes 负责 AES,CompressorFileSystem/DataCommunication 负责目录树、文件头、偏移量、路径和数据块读写。

需要注意的是,并发代码承担的是模块交接任务。TaskMonitor 使用 vectorcondition_variablemutex 管理多条队列。工程结构已经脱离单文件测试程序的写法。

Locator ,关键工具。用于归档文件写入文件头后偏移量字段回填。负责在文件头、目录块、数据区之间定位,封装并且统一所有 seekgseekp的调用。directoryOffsetcompressedSize、目录块大小和文件头定位从此纳入同一套偏移量规则。

协议中出现需要回填的字段,不同区域通过偏移量互相引用。

2025 年 11 月 1 日到 2025 年 11 月 13 日:HeaderReader、filesystem 与目录信息读取#

读取器 ReaderReaderUpdateReader_filesystemHeaderReader 的重构。主要处理文件系统路径接入、目录项结构化读取、位流与普通文件流统一、Windows 路径编码处理。读取器形态由普通文件流读取转向“按目录项解释字节流”。

抛弃posix(我不会),使用标准库的filesystemMyQueue、辅助结构、目录队列、文件队列成形,构建目录块解析方案。

Windows 路径问题。宽字符路径做过试验,最终规则尚未固定,但编码已经进入协议设计范围。

读取器重构后,目录信息进入内存结构,由读取器和队列维护。

2025 年 11 月 17 日到 2025 年 11 月 30 日:HeaderWriter、Huffman 序列化与 Header 雏形#

开始写入端的编写。HeaderLoaderFileLibraryDirectoryReaderHeaderWriter 。读取和写入形成对应关系:目录信息如何落盘,解压侧就按同样规则读回。文件头预留哪些字段,数据区写入时就按同样位置回填。

Huffman 编码树保存方式固定。树序列化采用先序遍历,叶子节点写 'l' 和字节值,内部节点写 'r'。解压侧根据树数据重建 Huffman 树,不重新扫描整文件统计频率。树的序列化方式固定后,压缩侧与解压侧共享同一份树结构,数据块也具备独立编码和独立恢复条件。

文件头Header结构同步定形。包含 魔数、策略号、版本号、保留位、目录偏移量、尾部魔数。

文件头里预留八位strategy。为多策略模式保留扩展位。

2025 年 11 月 29 日到 2025 年 11 月 30 日:AES 从 ECB 转向 CFB#

目录块和数据块纳入协议后,AES 模式需要随协议组织方式调整。归档文件按给定大小数据块写入,不做16B块对齐。目录信息和数据信息都依赖块分割协议。AES加密模式从CBC改成 CFB。原因是CFB 不改变数据长度,更加能准确还原信息,也便于在分割标准中记录 IV。

结果#

AES 原型脱离单文件实验。目录结构、读取器、写入器、定位工具和偏移量规则纳入同一套代码。Huffman 树序列化方式固定,文件头字段和协议边界确定。CLI、目录恢复、数据区写入、GUI 都建立在这组协议代码上。


下一篇:SFC 开发日志(二):压缩 / 解压、目录恢复与首个 CLI 版本

SFC 开发日志(一):AES 原型、模块划分与 .sy 格式雏形
https://www.yonagi.world/posts/sfc-dev-log-1/
作者
YONAGI
发布于
2026-04-29
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
遠い日に想いを馳せて
Laplacian
封面
遠い日に想いを馳せて
Laplacian
0:00 / 0:00