【问题标题】:change git commit message and keep SHA the same更改 git commit 消息并保持 SHA 相同
【发布时间】:2014-01-30 07:56:27
【问题描述】:

由于 git SHA 是从提交文件、元数据和提交消息生成的哈希,因此更改提交消息会更改 SHA。

但是是否有可能对保留 SHA 的提交消息进行更改,通过在末尾使用一些随机字符串“平衡”对消息的更改,从而取消对原始消息的更改?

【问题讨论】:

  • 你为什么想要那个?
  • 实际应用(是否可行):假设您的 cmets 通过 URL 引用跟踪器中的问题,而这些都将发生变化。
  • 从这里的答案看来,您需要找到解决方法。

标签: git sha


【解决方案1】:

理论上这是可能的 - 可能存在一些填充可以保留 SHA1 总和。

实际上,这非常困难 - SHA1 是一种加密安全的哈希函数,这意味着您建议的事情实际上无法完成(不可延展性)。如果可以,SHA1 将是一个糟糕的加密哈希。

【讨论】:

    【解决方案2】:

    您正试图找到 SHA1 哈希算法的冲突,这只有通过需要大量计算能力来测试所有可能的填充的蛮力攻击才有可能。

    对此的一些分析可以在这里找到: https://www.schneier.com/blog/archives/2012/10/when_will_we_se.html

    他们写道:

    因此,碰撞攻击完全在 有组织犯罪集团实际上可以在 2018 年之前进行预算,并且 到 2021 年的大学研究项目。

    “正常”的人最好在赌博中碰碰运气。 ;)

    如果您对更多细节感兴趣,请在http://crypto.stackexchange.com 提问,因为这个问题实际上是关于密码学而不是关于 git。

    【讨论】:

      【解决方案3】:

      简单,但需要时间。准备好在接下来的几年里尝试不同的填充,直到获得匹配的 SHA。

      如果您的签入允许您添加一个字符而不更改签入的语义(cmets、可选空格;您有什么),请尝试再添加一个字符并查看生成的哈希值是什么。

      预计需要再试几次。 SHA1 是 160 位,因此您应该计划花费 2^160 倍(大约 1.46e48)的很大一部分。

      【讨论】:

      • 这实际上只是对@michas 出色答案的半开玩笑的解释。
      猜你喜欢
      • 1970-01-01
      • 2011-06-29
      • 2016-10-09
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      相关资源
      最近更新 更多