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

Git提交签名本地验证:ECDSA哈希值z的计算方法问询

手动计算Git提交签名的ECDSA目标哈希(z值)

问题出在这:你直接对commit文件算SHA256,得到的是原始commit数据的哈希,但GPG在计算ECDSA的z值前,会按照OpenPGP的规范给待签名的commit数据做一层预处理,这才是哈希的真正输入。

具体操作步骤

假设你手里的commit文件是Git提交对象的原始二进制内容(可以用git cat-file commit <提交哈希> > commit导出,别用文本编辑器修改,避免换行符或编码变更),按下面步骤计算:

  1. 获取commit文件的字节长度
    运行这条命令得到文件的字节数,记为L:

    wc -c < commit
    
  2. 构造GPG用的哈希输入并计算SHA256
    GPG对二进制数据签名时,会给原始数据添加前缀:先是一个\x00字节,接着是4字节大端格式的文件长度,最后拼接原始commit内容。直接用这条命令一步到位:

    (echo -n -e '\x00' && printf "%08x" $(wc -c < commit) | xxd -r -p && cat commit) | sha256sum
    

    拆解命令逻辑:

    • echo -n -e '\x00':输出前缀的0字节
    • printf "%08x" ... | xxd -r -p:把字节长度转换为4字节大端的二进制格式
    • cat commit:拼接原始commit数据
    • 最后通过管道传给sha256sum计算哈希
  3. 对比验证
    把上面得到的哈希值和gpg --verify --debug=7 sig commit输出中的目标哈希对比,完全一致的话,这个就是ECDSA规范里需要的z值。

额外注意

  • 如果你的GPG密钥使用的是secp384r1这类曲线,对应的哈希算法是SHA384,只需把命令里的sha256sum换成sha384sum即可。
  • 务必保证commit文件是原始二进制格式,别用记事本类工具打开保存,否则内容或长度会发生变化,导致哈希值不符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:27:14