目录校验和

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了目录校验和相关的知识,希望对你有一定的参考价值。

我有80个文件的目录,我想检查目录的校验和。

我想验证目录的内容是否与最新版本匹配。

我使用实时系统,所以它需要高效。

我找到了一些文件校验和功能。

我的问题是:我可以在没有循环所有文件的情况下对目录进行校验和吗?

答案

一种可能的解决方案是维护一个特殊(隐藏)文件,您可以在其中保留每个文件的修改日期时间和哈希值,并在文件更改时更新它。然后将该文件的哈希值作为目录的哈希值。这不会阻止计算所有文件的校验和,但会减少文件更改时的工作量。如果您需要创建目录的快照,那么您没有选择,但需要按特定顺序校验每个文件。

注意:您可以考虑避免加密哈希,除非您强烈要求它们不能伪造。加密哈希是相当缓慢和低效的,这是故意的。

另一答案

我不确定你的申请。 md5校验和通常用于精度优于速度的情况下(或者为犯规游戏提供额外的障碍。)

在速度为王的构建系统中,文件约会通常用于评估目录相等性。例如,鉴于最新目录是:filesystem::path foo和相关目录是:filesystem::path bar你可以简单评估:

equal(filesystem::directory_iterator(foo), filesystem::directory_iterator(), filesystem::directory_iterator(bar), filesystem::directory_iterator(), [](const auto& lhs, const auto& rhs) { return filesystem::last_write_time(lhs) == filesystem::last_write_time(rhs); })

Live Example

关于这个单线的一些注意事项:

  1. 这不是一个递归函数,它只评估foobar中的日期
  2. 如果你正在使用目录,Visual Studio's implementation of last_write_time seems to have an issue with directories
  3. 例如,在构建系统中,这比md5校验和具有巨大优势,我可以将lambda中的==更改为<,如果您已将其中一个文件手动更新为较新的测试版本,则一个班轮仍将肯定地回复

以上是关于目录校验和的主要内容,如果未能解决你的问题,请参考以下文章

Android App 安全的HTTPS 通信

在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途

串行通信协议

SpringBoot - 使用Assert校验让业务代码更简洁

SpringBoot - 使用Assert校验让业务代码更简洁

FPGA/数字IC手撕代码6——数据奇偶校验