SFV 文件末尾的 QuickSFV 注释基于什么?
25-Monty_Python-The_End-EOS.mp3 D387716E
;Q1-1c11727069c13b6
;Q1-///4AA==
在版本 2 中,它又多了一行:
cowiso-xvid-yrrol.part48.rar 60C3AB2E
cowiso-xvid-yrrol.part49.rar E50D18BC
;Q2-1c25890ae82a640
;Q2-8KmPHkmiwgE=
;Q2-////////gA==
SFV 文件具有不同类型的评论取决于工具,但只有 QuickSFV 会编辑文件并在末尾存储奇怪的信息。请参阅SFV 常见问题解答有关 SFV 文件格式的更多信息。
表示;
注释行的开始,Q1-
并且Q2-
似乎指的是 QuickSFV 主要版本。我查看了版本历史记录,到目前为止,我发现了以下这些:
v1.50b 更改:修复了 .SFV 文件最后一行未以 CR 或 LF 结尾的小错误。“先前检查的文件”数据库将附加到该行的末尾,而不是单独一行。
v1.51 变化:如果 SFV 文件中已经嵌入现有 DB,QuickSFV 将使用它但不会更新或删除它。
它被称为“先前检查的文件”数据库。
v1.60 更改:现在在“先前检查的文件”数据库中记录了一个唯一签名,以跟踪数据库是由当前用户还是其他用户创建的。这将有助于 SFV 文件创建者验证文件并在上传 SFV 文件时保留先前检查的文件数据库。此签名只是一个随机数,不包含运行它的机器的特定信息。它是在安装期间生成的,或者在缺少相应的 INI 设置时生成。只要您安装到与现有版本的 QuickSFV 相同的文件夹,升级就会保留此签名。安装到新文件夹将重置此签名,导致 QuickSFV 在验证时忽略先前检查的文件数据库。卸载 QuickSFV 将删除该签名。
随机数位于 quicksfv.conf 文件中,该文件可在C:\Users\User\AppData\Local\QuickSFV
版本 3 中找到,看起来像
Signature=1234567890
,一个 10 个字符的数字,似乎是随机的。版本 2 ini 位于C:\Program Files (x86)\QuickSFV\QuickSFV.ini
,包含一个 15 个字符的十六进制字符串。在上面的示例中,这是第一行。此行对于系统将保持不变,并且可以识别安装。
我不相信这个字符串仍然是完全唯一或随机的!互联网上的随机 SFV 文件似乎以1c
或 开头1d
。也许它基于安装的时间戳?对于我的测试,它以 1d 开头,而所有较旧的文件似乎都以另一个开头。
带着这个怀疑,我通过实验得到了如下结果:
Signature=1d17fc36609ef78
;Q2-1d17fc7bfca4eee
;Q2-1d17fc830b747a9
这显然是一个递增的数字。如何将其转换为日期,还是其他什么?
v2.00 更改:为先前验证的数据库添加了过期功能。这是一个 .INI 设置,允许您在假设数据库已过期并重新验证所有文件之前指定数据库的最大日期。它默认为无过期,但 [...] 添加了右键单击菜单选项,可从当前 .SFV 文件中删除所有先前验证的数据库信息。
更改数据库后,文件的时间戳会被修改。这就是此功能的工作原理。
然后还有一两行需要解释。确切地它们代表什么?这个数据库如何工作?
答案1
今天看到您的帖子后,我对此进行了一些研究。
我无法对第一行做太多评论。如您所知,这是安装 QuickSFV 时写入的签名。不幸的是,这也是我所知道的全部。
第二行是 Windows 的 Base64 编码的 FILETIME 时间戳。根据 Microsoft 的说法,该值是“自 1601 年 1 月 1 日(UTC)以来的 100 纳秒间隔数”。QuickSFV 在检查/验证完成时写入当前系统时间(包括仅检查其数据库而不检查/验证任何文件的情况)。
第三行是一组 Base64 编码的标志位。0 表示缺失或损坏,1 表示已验证。如果有 1 个文件,则只有一个标志位,如果有 1000 个文件,则有 1000 个标志位。
希望这可以帮助任何试图使用 .sfv 文件中先前检查的文件数据库的人。
答案2
签名不是随机的。它与 Windows 时间戳类型相同。我认为除了极端情况外,它可能在所有情况下都足够独特,但不包含任何有关用户或系统的识别信息。我认为这是一个很好的解决方案,需要一个“足够独特”的标识符,但不能真正识别用户/计算机。如果你问我,这有点酷。
我还可以告诉你,签名用于确定你的系统是否已验证文件。如果签名不匹配,则它将忽略标志并重新验证每个文件。此外,时间戳的原因可能是将其与校验和文件进行比较。如果其中一个校验和文件的时间戳晚于 .sfv 文件中存储的时间戳,则该文件很可能已被更改,必须重新验证。
答案3
我制作了一个网页,粘贴 SFV 文件,结果如下:http://rescene.wikidot.com/quicksfv
给出的答案是正确的。使用 JavaScript 是比较棘手的部分 :)
签名是FILETIME 时间戳编码为一个大的十六进制数:高位在前,低位在后。第一个字节的前导零不显示。
第二行是 Windows 的 FILETIME 时间戳,但结构采用Base64编码,前32位为低位字节。
第三行是Base64编码的一组标志位。
答案4
这很有趣,但这肯定会使该工具的用途失效吗?如果数据库报告已验证成功,您如何知道损坏的文件已损坏?
例如,如果系统中存在未被发现的故障内存模块,则可能会悄无声息地损坏文件,而不会更改文件的大小或时间戳。由于 QuickSFV 的数据库功能,这些文件不会被检测为损坏。