SHA-1 哈希计算

在浏览器中实时计算输入字符串的 SHA-1 哈希值。SHA-1 生成 160 位哈希值,但 2017 年 SHAttered 攻击已实证碰撞,不建议用于新项目。

已复制!

SHA-1 杂凑值是什么

SHA-1 是由任意长度的数据计算出160位元固定长度值的杂凑函数。输出以40个十六进位字符表示,相同输入永远得到相同的值。本工具会在浏览器内即时计算所输入字符串的 SHA-1 杂凑值,输入内容不会送往外部。

不过 SHA-1 已无法用于新的资安用途。因为2017年已实证出可由两个不同文件刻意制造相同杂凑值的攻击。签章、凭证、密码保存请选用 SHA-256 以上。本工具的用途仅限于与既有系统所输出的值相互核对,或确认演算法的行为。

SHA-1 杂凑值的计算步骤

  1. 输入字符串 输入想杂凑化的字符串。输入的同时即会计算并显示结果。
  2. 确认结果 会显示40个十六进位字符。只要改动输入中的一个字符,值便会完全不同。
  3. 复制并核对 可用复制按钮放入剪贴板,与既有的值相互比对确认。

用好本工具的小技巧

  • SHA-1 由 NSA 设计,1995 年被 NIST 标准化,输出 160 位(40 个十六进制字符)。
  • 2017 年,Google 与 CWI 研究所通过"SHAttered"攻击首次实证 PDF 文件的 SHA-1 碰撞。
  • 主流浏览器已于 2017 年起将基于 SHA-1 的 TLS 证书标记为不受信任,Git 也在向 SHA-256 迁移。
  • 在 git log 中可以看到 SHA-1 提交哈希,这是 SHA-1 在现实中最常见的形式之一。
  • 新系统设计中请使用 SHA-256 或更高级别的算法。

SHA-1 杂凑计算的实用场景

与既有系统的值相互核对

可确认是否与仍持续使用 SHA-1 的系统所输出的值一致。可用于迁移作业中的验证。

理解 Git 的杂凑值

可实际产生与提交ID相同的40字符格式来确认。有助于掌握 Git 所处理的是怎样的值。

建立实作的测试数据

在实作杂凑处理时,可在此备妥可作为期望值使用的已知数值。

确认杂凑函数的性质

可实际观察只要改动输入中的一个字符、输出便完全改变的情形。

与杂凑相关的术语

SHA-1
指产生160位元杂凑值的函数。1995年标准化,但现今安全性已被攻破。
碰撞
指两笔不同资料产生相同杂凑值的状态。SHA-1 已被实证可刻意制造出碰撞。
SHAttered
指2017年发表的 SHA-1 碰撞攻击的名称。当时实际制作出两份具有相同杂凑值的 PDF。
十六进位表示法
指以0到F的符号表示数值的方法。SHA-1 的160位元以40个十六进位字符表现。
SHA-256
指产生256位元杂凑值的函数。现今仍被视为安全,新的用途应选用此者以上。

常见问题

不适合用于安全场景(数字签名、证书、密码存储等)。2017 年 SHAttered 攻击已实证碰撞,请改用 SHA-256 或更高级别的算法。

不会。所有哈希计算均在浏览器本地完成,输入内容不会发送到任何服务器。

SHA-1 输出 160 位(40 个十六进制字符),MD5 输出 128 位(32 个十六进制字符)。两者均存在已知碰撞漏洞,均不适合用于安全目的。
工具君

闲话 ― SHAttered:以 9.22 京次计算实证的碰撞攻击

2017 年,Google 与荷兰 CWI 研究所合作,历时约 2 年、动用 9.9 万个 CPU 核心,成功生成了两个内容不同但 SHA-1 哈希完全相同的 PDF 文件——这就是"SHAttered"攻击。

此前,SHA-1 碰撞在理论上已被认为可行,但 SHAttered 首次将其付诸实践,迫使各大主流服务加速废弃 SHA-1。GitHub、Subversion 等代码托管平台随即宣布了迁移计划。

尽管如此,部分嵌入式设备和老旧系统仍在使用 SHA-1。完全废弃仍需时日,但在任何新规设计中使用 SHA-1 均不可接受。