是否可以预先计算 git 提交哈希,以便将其放置在提交本身中?

gtd*_*gtd 7 git cryptography sha

我正要从网站管理员中删除一项我认为没有人在使用的功能。不过,我想留言以防万一有人仍在使用它。我打算用以下内容替换 HTML 模板:

<p>This feature has been disabled.  If you need it back please ask engineering to revert #1234567890abcdef<p>
Run Code Online (Sandbox Code Playgroud)

显然我意识到这可以通过两次提交轻松完成。然而,我认为从密码学角度来看这是一个有趣的问题。

假设您只能修改哈希本身,那么满足此属性的哈希实际存在的可能性有多大?当你缩短哈希值时(因为 git 允许唯一的前缀),这样的哈希值的可能性可能会增加。6 个字符的前缀的概率是多少?找到它有多难?

mpo*_*llo 2

该脚本对短哈希执行类似的操作。

假设 (SHA-1) 哈希函数均匀分布(这就是要点),计算概率很容易。以下是 SHA-1 哈希值示例:

0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33
Run Code Online (Sandbox Code Playgroud)

40 个字符。每个字符 4 位。2^(number-of-characters * 4)的可能性。

因此,如果您想要 SHA-1 的前 7 个半字节(十六进制字符),则您需要2^(7*4)==1/268435456找到正确散列的机会。(正如您所看到的,这对于脚本来说应该不会太困难!)