在1.0.3版本中,Sync Vault引入了简易的指纹机制用于增强云盘自动同步时的安全性。指纹是基于本地仓库和云端仓库生成的一串字符信息,Sync Vault内部增加了一个指纹检测函数,假设指纹为fingerprint,检测函数为check。那么,在每次执行同步的时候,会触发check(fingerpringt),如果检测失败,则仅触发云盘文件下载和本地文件上传(相当于合并本地仓库和远程仓库)。如果检测成功,按照自动同步算法执行,通过fingerprint,可以实现:
- 保护本地仓库:云端仓库意外被清除,本地依旧保留。
- 超时检测:当本地仓库超过30天未同步,认为本地保存的云端信息已经不可靠,触发用户提示,用户可选择合并仓库。
- 强制安全同步:通过清除指纹信息,可以强制初始化同步。
指纹表示
当前实现中,指纹信息构成如下:
interface TagInfo {
id: string;
deviceType: string;
cloudType: string;
localFileNum: number;
lastSyncTime: number; // ms
}
- id: 一个随机数,用来代表当前设备。
- deviceType: 当前设备类型,当前值可为ios、android、macOS、windows、linux、unknown
- cloudType: 云盘类型,当前值可为baidu、aliyun、onedrive、nutstore、infinicloud、quark、cos
- localFileNum: 本地文件数量。
- lastSyncTime: 上次同步时刻,单位毫秒。
以上信息构成最终的指纹,比如:deadbeef-ios-baidu-1234-1762326288498,表示设备id为deadbeef的ios设备,于2025-11-05 15:04:48(UTC-8)在百度网盘上同步了1234个文件。
指纹信息在那里?在网盘仓库的根目录。有一个名为.syncvault-deadbeef-ios-baidu-1234-1762326288498的空白文件,这个文件就代表了指纹信息。删除该文件即表示清除指纹。
指纹失效检测
在自动同步的每一轮,云端快照中包含了云端保存的指纹信息,假设为remoteTag,同时生成本地的指纹信息为localTag。满足以下几个条件则认为指纹失效,失效后会触发初始化同步:
- remoteTag 为空 — 可能是第一次同步,也可能是云端被彻底清空了。
- localTag.localFileNum 超过快照中文件总数 100个以上 — 云端发生了较多的文件删除。
- localTag.lastSyncTime 超过 remoteTag.lastSyncTime 30天以上 — 本设备长时间未和云端同步。