github - 计算 Github API 文件 SHA
问题描述
我有一个文件,其内容是“来自测试” - 9 个字节。文档说创建文件的 SHA 是使用 SHA1 计算的:
计算文件的 SHA-1 哈希值并将其存储在 blob 对象中。
(来自https://developer.github.com/v3/git/blobs/)
但是,当我计算“来自测试”的十六进制编码 SHA1 输出时,我得到5669556d9a5c27fdd649dcaaa0873757c2aa402f
.
Github API 说 SHA 是62b551731eada762035d4665978027cd44291290
- 这是返回的 ETag 和用于检索文件的 API 响应中“sha”的值。此外,当我使用“from test”作为值和566955...
sha 调用 CreateFile 端点时,我被告知 SHA 不正确。
我还尝试添加换行符,计算内容的 base64 编码值的 SHA,计算 base64+ 的 SHA 尾随换行符,但没有一个给我62b551731eada762035d4665978027cd44291290
。Github 是如何计算这个值的?
我已经仔细检查了远程文件的内容是否相同 - “来自测试” - 不知何故 SHA 仍然不同。
解决方案
Ah - GitHub 正在计算 的总和blob <length>\x00<contents>
,其中 length 是内容字符串的字节长度,\x00
是单个空字节。
sha1("blob 9\x00from test")
产生正确的总和!
有关更多信息,请参阅https://stackoverflow.com/a/7225329/329700。
推荐阅读
- ssl - GCE 上的自签名 SSL 证书——“无法解析 SSL 证书”
- c# - 如何加入滑动窗口
- php - 如何使用 URL 查询字符串在同一页面中显示不同的内容?
- ios - 什么是 iOS 相当于 WPF 的 Grid 与星大小?
- matlab - 如何在 MATLAB 中将轴限制全局设置为绘制数据的最小值和最大值?
- javascript - Javascript:向登录 api 发送 ajax 请求——在哪里保存令牌?
- c++ - 变体访问重载技巧在 gcc 中不起作用
- android-layout - Anko如何改变按钮颜色?
- apache-spark - 错误- pyspark 与嵌套列表和列表 RDD 相交
- angular - 角度材质组件未正确渲染