【问题标题】:file within directory contains entire directory's current sha-256目录中的文件包含整个目录的当前 sha-256
【发布时间】:2017-06-05 15:53:49
【问题描述】:

我想在我的目录中创建一个文件,该文件包含该目录的 sha256 总和,包括该文件,并且在创建文件之后。这里的困难在于目录的 sha256 将受到使用所述 sha256 更新文件的影响。这可能吗?

我可以看到这几乎是在要求计算机预测未来,但我想知道是否有一些递归算法可以做到这一点。例如,如果和对象的校验和之间存在某种一致的关系,并且该对象的校验和改变了一个字节。

这是由这个问题引起的好奇问题:我正在尝试为缺少 .git 目录的存储库重新创建 git describe --tags 的输出(可能将此数据保存在存储库中)。

【问题讨论】:

  • 这个有什么用?只要文件在 repo 中,就可以使用 Git 轻松检索提交 ID。当 repo 消失时(当文件被导出时,f.e.),提交 ID 就没有用了。更重要的是,当重新设置提交时,Git 提交 ID 会发生变化。
  • 我想使用提交 ID(更具体地说是 git describe --tags 的输出)来标记构建工件,其中构建过程(在 AWS 代码管道中)使用导出的文件而不是整个存储库.

标签: git githooks sha256


【解决方案1】:

这是不可能的。甚至可能没有解决方案。举个简单的例子:假设一个 SHA256 哈希值只有 1 位,而不是 256 位。假设,如果我们将哈希0 放入文件中,则整个目录的哈希值为1;如果我们将1 放入文件中,则整个目录散列为0 的值。然后没有解决办法。完整的 256 位散列也会发生同样的事情。不过我不确定可能性。

如果有解决方案,您最终可以通过详尽搜索所有可能的校验和来找到它。由于安全哈希的本质,它不会比这更快。但这可能会一直持续到太阳变成红巨星并吞噬地球。

为了改善您的实际情况(注意XY problem),您可以尝试指示您的构建系统在构建之前将git rev-parse HEAD 的结果粘贴在源文件中的某个位置,或者让您的程序在运行时执行此操作。

【讨论】:

  • 谢谢。虽然我不明白你的第一段。你能详细说明一下吗?
  • 我只是说不能保证您正在寻找的校验和是否存在。我已经举例说明了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 2018-04-14
  • 2018-06-18
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
相关资源
最近更新 更多