Skip to content

SHA-1 哈希生成器(160 位遗留算法)

在浏览器中生成 SHA-1 哈希值 — 40 字符十六进制输出,无需上传。适用于 Git 指纹查询、旧证书核验和迁移审计的遗留工具。数据绝不离开你的设备。

无追踪 浏览器中运行 免费
⚠️ SHA-1 是遗留算法。新工作请使用 SHA-256。所有哈希计算均在本地运行——不会上传任何数据。
算法
已根据 NIST FIPS 180-1 测试向量审核 SHA-1 正确性;弃用措辞已对照 NIST SP 800-131A 验证 — Go Tools 工程团队 · 2026年5月28日

什么是 SHA-1?

SHA-1(安全哈希算法 1)是 NIST 于 1995 年以 FIPS 180-1 发布的 160 位密码哈希函数。它由美国国家安全局设计,用于替代 SHA-0(1993 年迅速撤回的有缺陷早期版本),并在整个 2000 年代成为数字签名、TLS 证书和代码签名的主流哈希算法。

被破解历史:2005 年,王小云团队发表了一种理论攻击,将 SHA-1 的碰撞阻力从预期的 2^80 降至 2^63 次运算——这是理论上的破解,但尚不实用。2017 年 2 月,Google 与阿姆斯特丹 CWI 发布了 SHAttered 攻击,使用约 110 GPU 年的算力生成了两份具有相同 SHA-1 哈希值的不同 PDF 文档。这是决定性的实际破解。NIST 已于 2011 年将 SHA-1 用于签名的场景标记为弃用(NIST SP 800-131A);浏览器厂商和 CA 随后于 2016–2017 年撤销了对 SHA-1 证书的支持。

当前状态:SHA-1 在所有安全敏感用途中均已被弃用——数字签名、证书指纹、密码存储和代码签名。它仍存在于 Git 的对象 ID 格式(提交哈希)中,在那里用于内容寻址而非安全目的,以及尚未迁移的遗留软件校验和中。Git 项目于 2.29 版本(2020 年 10 月)新增了 SHA-256 对象格式支持。所有新项目应使用 SHA-256 或更强的算法。

本工具完全在你的浏览器中使用 Web Crypto API 的 crypto.subtle.digest('SHA-1', ...) 计算 SHA-1。40 字符十六进制输出与 sha1sumopenssl dgst -sha1git hash-object 的输出完全相同。不会向任何服务器发送任何字节。

SHA-1 与 SHA-2 家族对比:SHA-1 产生 40 个十六进制字符(160 位)。SHA-256 产生 64 个十六进制字符(256 位),无已知弱点。MD5 产生 32 个十六进制字符(128 位),更早被破解(2004 年)。对于任何新的哈希工作,SHA-256 是标准选择。

// Hash text using Web Crypto API (SHA-1 — legacy use only)
async function sha1(text) {
  const data = new TextEncoder().encode(text);
  const hash = await crypto.subtle.digest('SHA-1', data);
  return Array.from(new Uint8Array(hash))
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');
}

await sha1('Hello, World!');
// → '0a0a9f2a6772942557ab5355d76af442f8f65e01'
// ⚠️ SHA-1 is broken — use SHA-256 for new work.

SHA-1 示例

查询 Git 提交指纹

tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
author A Dev <dev@example.com> 1716854400 +0000
committer A Dev <dev@example.com> 1716854400 +0000

Initial commit

Git 将每个提交存储为一个 blob,其 SHA-1 由提交头部加内容按此格式精确计算得出。`git log` 显示的 40 字符十六进制字符串就是直接的 SHA-1 指纹。将原始提交对象文本粘贴到此处即可重现相同的哈希——适用于调试 `git cat-file` 输出或验证镜像仓库是否篡改了历史记录。注意:Git 2.29+ 支持 SHA-256 模式(git init --object-format=sha256),GitHub 的对象存储最终也将迁移。对于新仓库,建议优先使用 SHA-256 模式。

核验遗留 TLS 证书指纹

-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKlL...
-----END CERTIFICATE-----

2017 年以前,浏览器以 40 字符 SHA-1 十六进制字符串显示证书指纹。CA 于 2016 年 1 月停止颁发 SHA-1 签名证书,各主流浏览器于 2017 年初撤销支持。如果你正在审计旧内部证书或核验遗留 IoT 设备,可将 PEM 正文粘贴到此处重现 SHA-1 指纹以供比对。现代工作流使用 64 字符的 SHA-256 指纹。

旧版软件下载校验

node-v0.12.7-linux-x64.tar.gz

部分旧版软件归档文件至今仍仅发布 SHA-1 校验和。虽然这只能提供基本的损坏检测(而非篡改检测),但仍优于没有校验和。使用「文件」选项卡拖入归档文件,计算 SHA-1 后与发布方公布的值进行比对。如果 SHA-256 也有提供,请始终优先使用。对于新归档文件,应坚持使用 SHA-256 或 SHA-512 校验和。

SHAttered 碰撞演示

(通过「文件」选项卡粘贴 Google/CWI shattered-1.pdf 文件内容)

2017 年 2 月,Google 与阿姆斯特丹 CWI 发布了 SHAttered 攻击——首个实际 SHA-1 碰撞。他们制造了两个不同的 PDF 文件(shattered-1.pdf 和 shattered-2.pdf),其 SHA-1 哈希值完全相同:38762cf7f55934b34d179ae6a4c80cadccbb7f0a。将任一 PDF 拖入本工具的「文件」选项卡,均会得到该哈希值,证明碰撞真实存在。这一演示是 SHA-1 已被破解的最有力证据:两份不同文件拥有相同指纹,意味着指纹不再是可靠的身份标识。所有新的文档完整性工作流请使用 SHA-256

如何生成 SHA-1 哈希值

  1. 1

    粘贴文本或拖入文件

    选择「文本」选项卡,粘贴任意字符串——提交消息、证书正文或遗留校验和输入——到输入区域。SHA-1 哈希值会随输入实时更新。对于文件,切换到「文件」选项卡,将任意文件拖入拖放区;浏览器在本地对其进行哈希,无需上传。

  2. 2

    复制 40 字符哈希值

    点击哈希输出旁的「复制」按钮。完整的 40 字符小写十六进制字符串将复制到剪贴板。如果你的遗留系统需要大写十六进制,可使用「大写」切换——部分旧工具和 Windows API 默认使用大写。

  3. 3

    与遗留指纹进行比对

    切换到「对比」选项卡,并排粘贴两个 SHA-1 哈希值以确认是否一致。适用于核验遗留发布方的校验和、审计镜像 Git 仓库,或核查早于 SHA-256 普及时代的文档中的旧版 TLS 证书指纹。

技术细节

算法:Merkle-Damgård 构造,80 轮
SHA-1 以 512 位(64 字节)块处理输入,分四个各 20 轮的阶段应用 80 轮位运算,每阶段使用不同的逻辑函数(Ch、Parity、Maj、Parity)和从小整数平方根派生的加法常数。初始哈希状态为五个 32 位字(A–E),最终哈希是最后一个块处理后这些字的拼接。实现定义于 FIPS 180-1(1995 年),由 FIPS 180-4(2015 年)取代,后者正式包含弃用语言。
输出:160 位,40 个十六进制字符
始终恰好为 40 个小写十六进制字符(160 位 = 20 字节,每字节编码为 2 个十六进制字符)。无论输入大小,输出长度固定。与 SHA-256 的 64 字符相比,更短的输出提供了更少的碰撞阻力位数——这是 SHA-1 早于 SHA-256 被破解的关键因素。
性能:快速,但这正是问题所在
SHA-1 运算速度很快——在浏览器中使用 Web Crypto 通常可达 400–700 MB/s,与 SHA-256 相当。对于攻击者而言,这种速度是一种优势:现代 GPU 集群每秒可计算数十亿个 SHA-1 哈希值,加速了暴力破解和碰撞搜索。正是因为速度快,SHA-1(如 MD5)绝不能用于密码存储——请改用 bcrypt、scrypt 或 Argon2。
标准:FIPS 180-1(1995 年)——在 FIPS 180-4 语境下已弃用
SHA-1 在 FIPS 180-1(1995 年)中标准化,取代了有缺陷的 SHA-0。NIST 于 NIST SP 800-131A(2011 年)中将 SHA-1 用于数字签名的场景标记为弃用,并在 FIPS 186-5(2023 年)中正式禁止其用于所有数字签名生成。RFC 6194(2011 年)记录了已知安全注意事项。W3C WebCrypto API 出于遗留互操作性原因仍包含 SHA-1,这正是本浏览器工具能够计算它的原因。

最佳实践

切勿将 SHA-1 用于安全敏感操作
SHA-1 在数字签名、TLS 证书、代码签名、密码存储以及任何需要碰撞阻力的工作流中均已被弃用。2017 年的 SHAttered 攻击证明了实际碰撞的可行性。对于所有安全用途,请迁移到 SHA-256 或 SHA-3。在现代硬件上,成本差异可以忽略不计——SHA-256 在所有现代 CPU 和 GPU 上均有硬件加速支持。
SHA-1 用于遗留指纹查询是可接受的
如果你需要核验 2017 年前的文件校验和、查询 Git 提交 ID,或出于审计目的检查旧证书指纹,SHA-1 是合适的。哈希本身并不用于做出信任决策——你只是为了交叉参考而重现一个已知的指纹。在审计日志中明确记录这一点:「SHA-1 仅用于遗留参考,不用于安全验证。」
始终对 UTF-8 字节而非 Unicode 码位进行哈希
SHA-1 与所有哈希算法一样,操作字节而非字符。同一字符串以 UTF-8 和 UTF-16 编码会产生不同的哈希值。本工具在哈希前始终将输入编码为不含 BOM 的 UTF-8。如果你需要匹配使用不同编码(Windows UTF-16-LE、Latin-1)的系统,必须在外部预先编码输入后再比较哈希值。
在代码中验证哈希值时使用恒定时间比较
如果在代码中比较两个 SHA-1 哈希值,请使用恒定时间等值检查——Node.js 的 crypto.timingSafeEqual()、Python 的 hmac.compare_digest()——而非简单的字符串等值比较(=== 或 ==)。简单比较会泄漏时序信息,理论上允许攻击者逐字节重建预期哈希值。即使对于遗留 SHA-1 验证,这也是一种纵深防御措施。

SHA-1 常见问题

SHA-1 现在还安全吗?
不安全。SHA-1 于 2005 年在理论上被证明存在弱点,2017 年 2 月 Google 与阿姆斯特丹 CWI 通过 SHAttered 攻击演示了首个实际碰撞——两个不同的 PDF 文件拥有相同的 SHA-1 哈希值。NIST 于 2011 年将 SHA-1 用于数字签名的场景标记为弃用(NIST SP 800-131A),各主流浏览器和 CA 于 2017 年前后停止接受 SHA-1 证书。SHA-1 在任何安全敏感用途中均已被破解:签名、证书、密码存储。所有新工作请迁移到 SHA-256
Git 为何仍使用 SHA-1?
Git 使用 SHA-1 作为对象 ID(提交哈希、树哈希、blob 哈希),因为它在 2005 年设计时 SHA-1 仍被广泛信任。Git 的用途并非密码学签名——它是一种内容寻址方案,用于检测意外损坏而非故意篡改。Git 项目自 Git 2.29(2020 年)起开始迁移,添加了 --object-format=sha256 支持。GitHub 等大型代码托管平台正在逐步推出 SHA-256 模式。由于数十亿个现有提交 ID 的存在,迁移过程较为复杂。目前,SHA-1 提交 ID 仍是大多数 Git 历史的存储方式,因此本工具在交叉校验提交对象哈希时仍有实用价值。
我是否应该从 SHA-1 迁移到 SHA-256?
是的,对于任何安全敏感系统。具体迁移清单:(1) TLS 证书——如果仍有 SHA-1 签名的证书,请立即替换;CA 也不会再颁发新的了。(2) API 签名和 HMAC——替换为 HMAC-SHA-256。(3) 以 SHA-1 存储的密码哈希——迁移到 bcrypt 或 Argon2。(4) 文档或软件包校验和——以 SHA-256 重新发布,或与 SHA-1 并存。(5) Git 仓库——如果工具链支持,新仓库可选用 SHA-256 模式。归档下载文件上的历史校验和可保持原样,因其仅用于检测意外损坏。
什么是 SHAttered 攻击?
SHAttered(shattered.io,2017 年 2 月)是由 Google Security 与阿姆斯特丹 CWI 制造的实际 SHA-1 碰撞。此次攻击耗费约 110 GPU 年的算力(按 2017 年云端价格约合 11 万美元),生成了两个不同的 PDF 文件,其 SHA-1 哈希值完全相同:38762cf7f55934b34d179ae6a4c80cadccbb7f0a。这彻底打破了 SHA-1 碰撞仅存在于理论层面的假设。该攻击通过利用 SHA-1 压缩函数中的差分路径实现。到 2020 年,一次选择前缀 SHA-1 碰撞的成本已降至约 4.5 万美元。对比 SHA-256——迄今为止从未发现任何形式的碰撞。
SHA-1 碰撞会偶然发生吗?
在没有蓄意操作的情况下偶然发生 SHA-1 碰撞的概率仍然极低——SHA-1 共有 2^160 种可能值,对于任意两个给定输入,随机碰撞概率约为 10^24 分之一。真正的风险来自蓄意攻击:有能力的攻击者现在可以花费约 4.5 万美元构造一次碰撞。SHA-1 弱点导致 Git 历史意外损坏并不是现实威胁。真正的风险在于数字签名文档、证书和代码签名工作流,攻击者可能用与受信任文档具有相同哈希值的恶意文档进行替换。
SHA-1 用于校验和等非安全场景还可以吗?
对于检测意外数据损坏——下载损坏、磁盘比特翻转——SHA-1 在技术上仍然足够,因为意外碰撞依然实际上不可能发生。然而,即使用于非安全校验和,也几乎没有理由继续使用 SHA-1,因为 SHA-256 在现代 CPU 上有硬件加速支持,速度差异可以忽略不计,且具有普遍兼容性和长远保障。如今使用 SHA-1 的唯一合理理由是与只接受 40 字符十六进制指纹的遗留系统保持互操作性。
SHA-1 哈希有多长?
SHA-1 哈希始终恰好为 160 位,以 40 个十六进制字符表示(每字节 2 个十六进制字符 × 20 字节)。无论输入大小,输出长度固定不变——对单个字符或 10 GB 文件进行哈希,均产生恰好 40 个十六进制字符。对比:MD5 产生 32 个十六进制字符(128 位),SHA-256 产生 64 个(256 位),SHA-512 产生 128 个(512 位)。相比 SHA-256,输出更短是 SHA-1 碰撞阻力较弱的原因之一——可能值越少,统计上越容易找到碰撞。
我的输入会被发送到服务器吗?
不会。SHA-1 完全在你的浏览器中使用 Web Crypto API(crypto.subtle.digest('SHA-1', data))进行计算。在哈希过程中打开开发者工具 → 网络选项卡——你会看到零外发请求。你拖入的文件通过 FileReader API 在本地读取和哈希;字节数据不会离开你的设备。这使本工具可安全地用于哈希机密文档、遗留证书或专有源代码指纹。同样的隐私保证适用于 SHA-256 生成器
为什么我的 SHA-1 输出与命令行 sha1sum 不同?
几乎总是因为尾部换行符。Shell 命令 echo 'hello' | sha1sum 在 'hello' 后包含换行符(\n),因此它哈希的是 'hello\n' 而非 'hello'。请使用 echo -n 'hello' | sha1sumprintf '%s' 'hello' | sha1sum 来去除换行符。其他常见原因:Windows 换行符(\r\n 与 \n)、文件开头的 UTF-8 BOM,或编码差异(UTF-8 与 Latin-1)。本工具在哈希前将输入编码为不含 BOM 的 UTF-8。

JWT 解码器 · 在线解码工具

安全工具

免费 JWT 解码器,在线即时解码 JWT 令牌。查看头部、载荷、签名以及过期时间、算法和声明详情。100% 浏览器本地运行——令牌绝不离开你的设备。无需注册、无跟踪。

在线 MD5 哈希生成器与文件校验工具

安全工具

在线生成 MD5、SHA-256、SHA-1、SHA-512 哈希值 — 完全免费,浏览器本地运算,无需注册。支持文本和文件哈希、校验和验证、哈希值对比,一键复制,数据绝不离开你的设备。

随机密码生成器 — 自定义长度、强度与安全性

安全工具

免费在线随机密码生成器,一键生成高强度安全密码。支持自定义长度、字符类型,批量生成多个密码。所有密码仅在浏览器本地生成,不上传不存储。

SHA-256 哈希生成器与校验和工具

安全工具

免费在线生成 SHA-256 哈希值。在浏览器中对文本或文件进行哈希、验证校验和,复制 64 字符十六进制输出。无需注册,数据不离开页面。

SHA-3 哈希生成器(Keccak SHA3-256)

安全工具

免费在线生成 SHA-3 哈希值。NIST FIPS 202 海绵构造——SHA-2 后的新一代标准。SHA3-256 输出 64 个十六进制字符。纯浏览器运行,通过懒加载 js-sha3 实现,零上传。

SHA-384 哈希生成器(TLS Suite B 哈希)

安全工具

在线生成 SHA-384 哈希值——96 字符十六进制输出,免疫长度扩展攻击,符合 NSA Suite B 标准。与 AES-256-GCM 配对用于 TLS。所有哈希通过 Web Crypto API 在浏览器中运行。