v2.4.4
新功能:子文件夹链接下载
mega.nz/folder/根ID#密钥/folder/子ID现在仅下载指定子文件夹的内容(路径以子文件夹为根重定基),不再下载整个根文件夹mega.nz/folder/根ID#密钥/file/文件ID仅下载指定单个文件- 正则扩展捕获子路径后缀;文件列表按父节点链过滤;下载路径重定基
修复:子文件夹链接下载完成后误报 MetaMAC 错误
根因:每个数据分块的 CBC-MAC 计算使用零初始 IV。而 MEGA 真实算法(SDK SymmCipher::ctr_crypt)的分块 MAC 初值是文件 nonce 复制两份 [n0, n1, n0, n1](key 第 4-5 word)。零 IV 算出的 MAC 与任何真实上传文件的 MetaMAC 都不可能匹配,因此所有带 8 words key(内嵌 MetaMAC)的下载必然报错;单文件公开链接(4 words key,跳过校验)不受影响,导致问题此前被掩盖。
修复:分块 MAC 初值改为 [nonce, nonce],逐行比对 SDK macsmac/ChunkedHash 源码确认对齐。同时移除"分块边界前缀匹配"宽容逻辑,与 SDK 一致:读完整个文件后一次性完整比较;任何位置的真实损坏仍然硬失败。
9 项安全加固
| 位置 | 修复 |
|---|---|
StripNullCharacters |
重写为 Replace(vbNullChar, ""),消除位置偏移错误 |
| AES 加解密 | 失败返回 Nothing;持久化点加密失败时跳过写入、保留旧值 |
| AES 密文格式 | 新增随机 IV 格式,与旧格式自动双向兼容 |
| MetaMAC 失败处理 | 抛异常并重置分块重试(配合算法修复,不再误报) |
| PSK 输入校验 | 含非 ASCII 字符(>255)时记日志返回 Nothing |
| Web 密码存储 | 随机盐 + PBKDF2(100k 轮)派生,替换无盐 MD5 |
| Streaming 密码比较 | 恒定时间比较 FixedTimeEquals,防时序侧信道 |
ClientConnected 反射 |
静态缓存 + null 检查 + Try/Catch,失败降级为假设已连接 |
Full Changelog: v2.4.3...v2.4.4