You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否根据给定SHA1哈希值生成匹配的指定大小二进制数据?

指定大小且匹配给定SHA1哈希值的二进制文件生成问题解答

可行性结论

完全可行,分两个层面说明:

  • 理论层面:根据鸽巢原理,固定长度的输入空间(比如16KB的文件共有2(16*1024*8)种可能的取值)远大于SHA1的输出空间(2160种可能的哈希值),必然存在至少一个对应长度的二进制串,它的SHA1计算结果等于给定的目标哈希值。
  • 实操层面:SHA1的抗碰撞性已经被正式攻破,2017年谷歌首次公开了SHA1碰撞实例,后续优化的算法已经把生成碰撞的成本降到了数千美元级别,如果你只需要生成无意义的二进制文件,不需要和现有合法文件内容碰撞的话,实现成本还会进一步降低。

对应你举的例子:给定16KB的大小要求和目标哈希A,只要你能接受对应的计算成本,完全可以生成一个16KB大小、SHA1值恰好为A的无意义二进制文件。

代码实现方向

不需要自己从零实现碰撞算法,直接基于业界已经公开的成熟SHA1碰撞工具二次开发即可,核心步骤如下:

  1. 先确定两个核心输入:目标文件大小target_size(比如16384字节)、目标SHA1哈希值target_hash(20字节二进制格式)。
  2. 构造前缀内容:生成target_size - 64字节的任意随机内容(64字节是SHA1算法的单个块大小),计算这部分前缀的SHA1中间计算状态。
  3. 碰撞求解:调用开源的SHA1选择前缀碰撞工具(比如sha1collisiondetection项目附带的碰撞生成模块),以步骤2得到的中间状态和target_hash为输入,求解出最后64字节的内容。
  4. 拼接输出:把前缀内容和求解得到的最后64字节拼接,就得到了大小符合要求、SHA1值等于目标值的二进制文件。

如果是用于本地测试、对生成时间没有严格要求的场景,也可以缩小碰撞空间:比如固定前target_size - 4字节的内容,暴力枚举最后4字节的所有可能,不过这种方法只有在运气极好的情况下才能快速得到结果,仅适合测试用,不适合生产场景。


内容的提问来源于stack exchange,提问作者NOmatter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:06:01