【问题标题】:Predict git commit id and commit a file which contains that commit id预测 git commit id 并提交一个包含该提交 id 的文件
【发布时间】:2014-02-22 03:00:29
【问题描述】:

如何做这样的事情:

  1. 创建一个包含以下内容的:

    $ cat testfile.txt
    此文件将使用以下 id 提交:83b90a07620ef578450c40a6d38bacc42de7ad2d

  2. 提交 testfile.txt
    $ git add testfile.txt
    $ git commit -m '谢谢'

  3. 执行 git log 以验证预测的提交 ID:
    $ 混帐日志
    提交 83b90a07620ef578450c40a6d38bacc42de7ad2d
    作者:rohit01 *@gmail.com>
    日期:2014 年 2 月 21 日星期五 23:46:52 +0530

基本上,预测下一个 git commit id 并提交一个包含该提交 id 的文件。

【问题讨论】:

  • 我很好奇这个用例是什么。当提交 id 可从 git log 获得时,为什么要保存它?
  • 用例:我在 github (github.com/rohit01/rohit01.github.io) 中托管我的博客。我想写一篇博客来解释它是如何工作的,并分享同一个博客的 github 提交链接。

标签: git


【解决方案1】:

这在密码学上是不可能的。

git 提交 ID 是提交内容的 SHA1 哈希。
您在提交中所做的任何更改也会影响 ID。

【讨论】:

  • 如果我没记错的话,它还取决于直接父级的 SHA1(因此不同分支中的相同提交)会产生不同的 ID。 stackoverflow.com/questions/5632520
  • 我认为这绝对不可能。这是极不可能的。 ^_^
  • 嗯,摩尔定律和一些专门的 FPGA 将使这变得微不足道。最终。
  • @MichaelStum:是的;还有作者、时间戳、描述,我不知道还有什么。
  • Google 刚刚宣布对 sha1 进行碰撞攻击 - shattered.io。所以这在加密上不再是不可能的。 stackoverflow 的不幸情况,因为这个答案在提交时是正确的:)
【解决方案2】:

CPU 周期是个问题吗?如果你有无限的时间,这可行:

此文件将使用以下 id 提交:83b90a07620ef578450c40a6d38bacc42de7ad2d

Junk characters: VGhpcyBpcyBhbiBlYXN0ZXIgZWdnISBJIGNvdWxkbid0IHRoaW5rIG9mIGFueXRoaW5nIGdyZWF0IHRvIHB1dCBoZXJlLiBVc2luZyBiYXNlNjQgdG8gZ2VuZXJhdGUganVuay1sb29raW5nIGp1bmsgaXMga2luZCBvZiBzaWxseSwgYnV0IHRoaXMgc2hvdWxkIGJlIGVub3VnaCwgcmlnaHQ/ICBJZGsuIFVwdm90ZSBwbHo/

然后枚举所有可能的垃圾字符,直到在散列下得到一个固定点。根据鸽巢原则,因为可以有更多的垃圾字符,并且假设哈希是“随机的”,这最终会起作用。

但这在任何合理的意义上都是不可能的,因为您正在尝试查找具有 Hash(S) = 83b90a07620ef578450c40a6d38bacc42de7ad2d 属性的字符串 S,根据定义,这对于安全散列算法来说是不可能的。

【讨论】:

  • which is by definition impossible;不;只是慢。 en.wikipedia.org/wiki/Preimage_attack
  • 如果需要一些可预测的有限时间,CPU 周期应该不是问题。你试过这种方法吗?
  • @rohit01 “可预测的有限时间”可能比宇宙存在的时间长许多数量级。
  • 所以在我提交这个文件之前我已经死了:p
  • @rohit01 除非在量子工程方面取得重大进展,否则我认为您不可能在有生之年提交具有此属性的文件。
猜你喜欢
  • 2014-11-20
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
  • 2015-10-05
  • 2013-08-18
  • 1970-01-01
相关资源
最近更新 更多