预测git commit id并提交包含该提交id的文件

时间:2014-02-21 18:45:35

标签: git

如何做这样的事情:

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

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

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

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

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

2 个答案:

答案 0 :(得分:6)

这在加密方面是不可能的。

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

答案 1 :(得分:1)

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

  

此文件将以此ID提交:83b90a07620ef578450c40a6d38bacc42de7ad2d

     

垃圾字符:VGhpcyBpcyBhbiBlYXN0ZXIgZWdnISBJIGNvdWxkbid0IHRoaW5rIG9mIGFueXRoaW5nIGdyZWF0IHRvIHB1dCBoZXJlLiBVc2luZyBiYXNlNjQgdG8gZ2VuZXJhdGUganVuay1sb29raW5nIGp1bmsgaXMga2luZCBvZiBzaWxseSwgYnV0IHRoaXMgc2hvdWxkIGJlIGVub3VnaCwgcmlnaHQ / ICBJZGsuIFVwdm90ZSBwbHo /

然后枚举所有可能的垃圾字符,直到你得到哈希下的固定点。通过鸽子原则,因为可以有更多的垃圾字符,并假设哈希是“随机的”,这将最终起作用。

但是这在任何合理的意义上都是不可能的,因为你试图找到一个带有S属性的字符串Hash(S) = 83b90a07620ef578450c40a6d38bacc42de7ad2d,根据定义,它不可能用于安全的哈希算法。