本工具计算什么
SHA-1 输出 160 位摘要,通常表示为 40 个十六进制字符。本页面向需要复现旧系统结果、核对兼容性测试或读取历史清单的场景。即使输出看起来都是十六进制,也不能把 SHA-1 与 MD5、SHA-256 直接比较。保留结果时,应一并记录算法名称。
复现历史摘要需要完全相同的字节,而不只是视觉相似的文本。编辑器附加的换行、文件开头的字节顺序标记、不同的 Unicode 表示,都可能使结果改变。核对已保存的文档时,应选择原文件,不要仅复制文档里显示的文字。
SHA-1 已被发现存在碰撞弱点。旧协议使用它,并不意味着新系统也应该选择它。若业务需要证明消息来自掌握共享密钥的一方,应使用适当的 HMAC 等认证机制;无密钥摘要不提供这种身份保证。
可核对的示例
UTF-8 · abc · SHA-1
a9993e364706816aba3e25717850c26c9cd0d89d
如何计算与比较
- 在输入文本中粘贴需要计算的内容,或点击示例加载
abc。工具按 UTF-8 编码计算,保留输入中的空格和换行。 - 单条文本模式下,不超过 64 KiB 的非空输入会在停止输入片刻后自动计算。计算空字符串或更大的文本时,请点击生成哈希。修改输入后,旧结果会立即清除。
- 如需核对已保存的文件,请切换到文件校验,确认算法后选择或拖入文件。文件模式会读取原始字节并自动开始计算。
批量处理时,勾选每行独立计算,选择是否包含空行,再点击生成哈希。逐行模式不会自动计算。CRLF、LF 和 CR 仅用于分隔记录,不计入各行摘要;重复行保留各自的原始行号。
将完整的十六进制参考值粘贴到比较预期值(可选),再点击核对。比较时忽略字母大小写和首尾空白,但不接受内部空格或错误长度。复制会保留完整结果。TXT、CSV 导出包含输入标识、算法和摘要,不包含原始文本或密钥。
限制、隐私与下一步
文本上限为 10 MiB;逐行模式最多接受 10,000 条记录,按过滤空行前的数量计算。文件队列最多 50 个文件,每个不超过 1 GiB,按 2 MiB 分块依序读取。这些限制用于控制浏览器资源占用,不保证每部手机都能快速处理最大输入;必要时可取消计算。计算在浏览器中完成,正常的页面和资源请求仍会发送到托管服务器。
SHA-1 文件摘要不等于 Git 对象 ID
本页计算的是文本或文件的原始字节。在使用 SHA-1 的 Git 仓库中,对象 ID 并不只是可见文件内容的 SHA-1:Git 会加入对象头,创建 blob 时还可能应用过滤规则。因此,和 git hash-object 不同,并不能直接说明本页算法有错。
核对旧系统前,先确认字段要求的是原始文件摘要、对象标识,还是某个签名结构中的摘要。原始 SHA-1 可以在这里复现,Git 对象应交给 Git 自身的命令计算。保留协议指定的算法名称,不要在不改协议的情况下悄悄换成更长的哈希。
原始文件 SHA-1 与 Git blob SHA-1 的对照
对于 abc 这三个字节,Git 的 SHA-1 blob 表示会在内容前加入 blob 3 和一个零字节。不要把可见的反斜杠加数字零输入文本框:这里是在解释对象表示,本工具没有 Git 对象计算模式。
SHA-1 / 原始 abc 字节:
a9993e364706816aba3e25717850c26c9cd0d89d
SHA-1 / Git blob (62 6c 6f 62 20 33 00 61 62 63):
f2ba8f84ab5c1bce84a7b441cb1959cfc7093b7f
SHA-1 兼容性排错
| 现象 | 原因 | 处理方式 |
|---|---|---|
| 与 Git 对象 ID 不同 | Git 计算的是对象表示而非单独文件内容 | 使用 git hash-object,并检查仓库过滤规则。 |
| 参考值有 64 个十六进制字符 | 这不是完整的普通 SHA-1 摘要 | 确认系统是否实际要求 SHA-256。 |
| 旧文件编辑后无法复现摘要 | 保存过程可能改变编码或换行 | 优先计算未经编辑的原始文件。 |