文件上次修改

Posted

技术标签:

【中文标题】文件上次修改【英文标题】:File Last Modified 【发布时间】:2012-01-17 14:56:43 【问题描述】:

在检测文件是否已更改时,使用上次修改的文件(例如 NTFS)是否安全?如果不是,文件备份应用程序是否总是对整个文件进行哈希处理以检查更改?如果是的话,什么哈希算法适合这个检查?

【问题讨论】:

哈希是我会使用的(SHA512 如果您真的担心文件哈希冲突。md5 如果您不太在意)。 同意@Blender。修改后的日期可以更改,而文件的内容实际上并没有改变——比如说,如果你触摸文件,或者点击保存而不做任何更改。像 git 这样的 VCS 工具使用哈希(在 git 中是 SHA1),因为两个最相似的文件不太可能具有相同的摘要。 +1 用于提出一个有趣的问题。如果数据量变大,使用哈希检查文件是否被修改会很耗时。 【参考方案1】:

这取决于应用程序的要求。它可以容忍误报吗?假阴性?

文件上次修改日期不可靠。例如,FTP 可以更改修改日期而不更改文件,或者一个文件可以下载两次,一次超过自身,更改修改日期而不更改文件。另一方面,有一些实用程序可以更改文件但保持相同的文件上次修改日期。

如果在文件更改后绝对必须对文件采取措施,可靠的方法是使用良好的哈希或指纹。这确实需要时间。在不花费太多时间的情况下提高几率的一种方法是将修改日期与文件大小进行比较,但这也不是万无一失的。

【讨论】:

【参考方案2】:

我不会太相信上次修改时间,因为即使打开文件并添加单个字符也会改变它的修改时间。哈希有冲突的问题,所以我建议阅读 Rabin 的指纹算法。

【讨论】:

在检查文件修改(假设哈希值不错)时,哈希冲突是一个现实问题吗?如果是的话,那不就意味着随意生成匹配哈希的内容会很“容易”吗? 指纹可以被看作是一个很好的散列函数,可以保证没有冲突。它可以唯一地识别可能不需要加密哈希函数的大数据块。许多文件备份应用程序通常通过网络传输修改后的内容,指纹可用于通过下载指纹并与之前的指纹进行比较来检测文件是否已更改。 我的意思是,一旦文件开始增长,生成哈希/指纹需要时间。假设您有 1 TB 的数据,仅通过 SATA 3 读取它至少需要 22 分钟。因此,如果您经常要检查数据是否已更改,则需要其他一些支持。 @ydev,你不能使用散列来保证没有冲突。如果没有发生冲突的可能性,则哈希必须至少与文件一样大(或此类文件的无损压缩)。【参考方案3】:

我认为习惯于设置有效且定期监控的哈希检查。最后修改我认为并不像许多人想的那样安全。坚持检查哈希并使用定期检查的好软件。

相信我,一旦您习惯了不选择最简单的路线并始终采取最安全的方式,您就会养成良好的习惯,从而推动您采取其他安全措施。

【讨论】:

以上是关于文件上次修改的主要内容,如果未能解决你的问题,请参考以下文章

目录上次修改日期

根据“上次修改日期”循环浏览文件夹中的所有文件

DataLake 文件 - 上次修改日期时间

是否可以从资产文件中获取上次修改日期?

查找上次按时间修改的文件

用 bash 取出文件上次修改时间