2017-06-05 74 views
0

我想在我的目录中创建一个文件,其中该文件包含该目录的sha256总和(包括该文件),并在创建该文件之后。这里的困难在于,通过用sha256更新文件会影响目录的sha256。这可能吗?目录中的文件包含整个目录的当前sha-256

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

这是一个好奇心的问题,我想为缺少.git目录的存储库重新创建git describe --tags的输出(假设将这些数据保存在存储库中)。

+0

这有什么用处?只要该文件在回购站中,就可以使用Git轻松检索提交ID。当repo消失时(当文件被导出时,f.e.)提交ID是无用的。更重要的是,提交重新发布时,Git提交ID会更改。 – axiac

+0

我想使用提交ID(更具体地说是'git describe --tags'的输出)来标记构建工件,构建过程(这里是AWS codepipeline)使用导出的文件而不是整个存储库。 – joelb

回答

0

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

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

要提高你的实际情况(当心XY problem),你可以尝试指示构建系统在源文件的地方沾git rev-parse HEAD结果前建设或让你的程序在运行时执行此操作。

+0

谢谢。虽然我不明白你的第一段。你能详细说明一下吗? – joelb

+0

我只是说,即使存在您正在寻找的校验和也不能保证。我已经通过举例说明了。 – Thomas

相关问题