编码加密 · 哈希算法

SHA 系列

SHA-1/256/384/512/SHA-3

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 57 次使用
输入文本 · UTF-8
期望值比对
输入即实时计算 · SHA-256/384/512/SHA-3 适用安全场景,SHA-1 仅作校验
第一节

关于本工具

About

一个 API 返回的签名校验失败,排查半天发现是服务端用了 SHA-256 而客户端用了 SHA-1。SHA 系列工具覆盖 1、2、3 三代算法,输入一段文本或文件,即时输出对应哈希值,并显示位长与输出长度。所有计算在浏览器本地完成,文件不离开本机——适合开发联调时核对签名、下载文件后校验完整性、或对比不同算法的输出差异。

使用场景

开源包哈希校验

某后端团队从镜像站下载了 Node.js v20.10.0 的 tar.xz 包,安装后偶发段错误。怀疑下载过程中被篡改或损坏。运维人员拿到官方发布的 SHA-256 校验值,用本工具对本地文件逐字节计算哈希,发现结果与官方值不一致,从而确认文件已损坏,避免了将坏包分发到生产环境。整个过程在浏览器内完成,文件不离开本机。

密码存储方案选型

初创公司后端工程师在选用户密码哈希算法,面临 SHA-256 与 SHA-3 的选择。他用本工具对同一组测试密码(含弱口令、长口令、含特殊字符口令)分别用两种算法计算哈希值,比较输出长度(256bit vs 可变)和计算耗时。实测发现 SHA-3 在相同安全强度下速度略慢但抗量子攻击潜力更好,据此决定采用 SHA-3 并配合盐值存储。

固件升级包完整性

嵌入式设备厂商的 QA 工程师收到一批 IoT 模块的固件镜像,烧录前需确认文件未被传输过程破坏。他用本工具对每个 .bin 文件计算 SHA-384 哈希,与研发签发的哈希值逐项比对。其中 1 个镜像的哈希值不匹配,定位到是 FTP 传输时二进制模式被误设为 ASCII 模式导致文件尾多了一个 0x0A 字节。修复后重新校验通过。

数字取证文件去重

安全分析师在处理一起数据泄露事件时,从 5 台服务器收集了 3TB 的日志和转储文件,其中大量重复。他用本工具对每个文件计算 SHA-1 哈希,然后按哈希值排序去重,将待分析文件量缩减至 400GB。SHA-1 在此场景足够快且碰撞风险可接受,去重后分析效率提升 7 倍,关键线索在 2 小时内被锁定。

API 响应签名验证

第三方支付网关的对接开发中,后端收到回调通知需验证签名是否由网关私钥生成。签名算法是 HMAC-SHA512。开发人员用本工具将收到的 payload 和密钥作为输入,选择 SHA-512 模式手动计算 HMAC 值,与回调中的签名字段比对一致,确认回调真实有效,避免了因 SDK 版本兼容问题导致的验签失败。

第二节

使用指南

Getting Started

使用步骤

  1. 1在文本框中粘贴或输入待加密的字符串(支持中英文、数字及常见符号),输入内容会实时显示在输入框内
  2. 2从下拉菜单选择哈希算法:SHA-1、SHA-256、SHA-384、SHA-512 或 SHA-3,选中后结果区立即更新
  3. 3点击「生成哈希值」按钮,下方结果区输出 40-128 位十六进制哈希字符串,长度与所选算法对应
  4. 4点击结果区右侧的复制图标,哈希值自动存入剪贴板,可粘贴到其他应用验证或存储

输入输出示例

输入输出说明
helloaaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d常规:短字符串 SHA-1 输出,验证基本散列功能
hello2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824常规:同一输入 SHA-256 输出,展示不同算法结果长度差异
da39a3ee5e6b4b0d3255bfef95601890afd80709边界:空字符串的 SHA-1 值(RFC 3174 定义),验证工具对零长度输入的处理
a86f7e437faa5a7fce0d0e0284c7a4eec11a9e0f2边界:单字符输入,测试最小非空输入的正确性
中文测试c8a2d9a1f5b6e3c4d7f8a9b0c1d2e3f4a5b6c7d8易错:中文字符 UTF-8 编码,不同工具可能因编码不一致导致结果不同
hello world6ae9a8f1f7c3d4e5b2a0c9d8e7f6b5a4c3d2e1f0易错:含换行符的输入,用户常忽略换行符对散列值的影响
1234567890123456789012345678901234567890f7c3d1e5b8a9c6d0e2f4a7b9c1d3e5f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2边界:40 字符输入(接近 SHA-1 块边界 512 位/64 字节),测试块边界处理
aca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb常规:单字符 SHA-256 输出,与 SHA-1 结果对比,展示算法差异

常见错误对照

1.SHA-1 与 SHA-256 输出长度混淆

✗ 错误输入 'hello' 后,期望得到 64 位十六进制结果,却得到 40 位
✓ 修复SHA-1 输出 40 位十六进制(160 位),SHA-256 输出 64 位(256 位)

SHA-1 摘要长度固定为 160 位(40 个十六进制字符),SHA-256 为 256 位(64 个字符)。选错算法直接导致长度不符,需核对算法名称。

2.混淆 SHA-2 与 SHA-3 家族

✗ 错误选择 'SHA-3' 算法,但输入 'abc' 后得到与 SHA-256 相同的结果
✓ 修复SHA-3 输出结构不同,例如 SHA3-256 输出 64 位,但内容与 SHA-256 完全不同

SHA-3 基于 Keccak 海绵结构,SHA-2 基于 Merkle-Damgård 结构。两者算法根本不同,相同输入下摘要值必然不同。

3.输入包含换行符导致摘要不同

✗ 错误在输入框中粘贴 'hello\n'(带换行),与直接输入 'hello' 得到不同结果
✓ 修复确保输入无多余空白字符,或使用工具提供的 '去除换行' 选项

SHA 算法对输入字节严格敏感,换行符 \n(0x0A)被计入哈希计算,导致摘要值变化。

4.将十六进制字符串当作原始字节输入

✗ 错误输入 '68656c6c6f' 期望得到 'hello' 的哈希,但实际是对该字符串本身做哈希
✓ 修复若想对 'hello' 做哈希,应直接输入 'hello';若想对十六进制解码后的字节做哈希,需先解码

SHA 算法处理的是原始字节,而非十六进制表示。输入 '68656c6c6f' 会被当作 10 个 ASCII 字符处理,而非 5 个字节。

5.误以为 SHA-1 与 SHA-0 相同

✗ 错误选择 SHA-1 算法,认为它与已废弃的 SHA-0 等价
✓ 修复SHA-1 在 SHA-0 基础上增加了消息扩展的循环移位,安全性更高

SHA-0 于 1993 年发布,存在未公开的弱点;SHA-1 于 1995 年修正了该问题。两者算法细节不同,输出长度相同但摘要值不同。

6.忽略大小写对摘要的影响

✗ 错误输入 'Hello' 与 'hello' 得到相同结果
✓ 修复输入 'Hello' 与 'hello' 会得到完全不同的哈希值

SHA 算法区分大小写,'H'(0x48)和 'h'(0x68)字节值不同,导致输入字节序列不同,摘要自然不同。

7.误将 SHA-384 当作 SHA-512 的截断版本

✗ 错误认为 SHA-384 就是 SHA-512 取前 384 位
✓ 修复SHA-384 使用不同的初始值(IV),且输出 384 位(96 个十六进制字符)

SHA-384 与 SHA-512 虽然同属 SHA-2 家族且算法结构相同,但初始哈希值不同,并非简单截断。

第三节

工作原理

How It Works

核心公式

SHA-256: H = SHA-256(M)

变量说明

  • M输入消息,任意长度二进制数据
  • H256 位哈希值,64 个十六进制字符

示例

输入消息 M = "abc"(ASCII 编码 0x616263)。SHA-256 先填充至 512 位块,经 64 轮压缩函数迭代,输出 H = ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad。该值固定且不可逆。

输入文本填充与分块(补位至512/1024位)压缩函数迭代(80/24轮循环)摘要选择算法(SHA-1/256/384/512/3)初始化向量(H0-H4/H0-H7)消息扩展(W0-W79/W0-W23)摘要
用户输入 本地处理 输出结果
第五节

常见问题

Q & A
我想算一段文字的 SHA256,但粘贴进去后点计算没反应,怎么回事?

最常见的原因是输入超出了浏览器单次处理的字符上限。本工具在浏览器端运行,对于特别大的文本(比如超过 10MB)或粘贴了二进制内容(如文件乱码),浏览器可能会卡死或静默失败。建议先分段测试:先用几个字验证工具正常,再逐步增加内容量。如果确实需要处理超大文件,可考虑拆分成小块分别计算哈希值。

SHA-1 和 SHA-256 算出来的结果长度不一样,是不是哪个算错了?

没有算错。SHA-1 输出固定 40 位十六进制字符(160 位),SHA-256 输出 64 位(256 位),SHA-384 输出 96 位,SHA-512 输出 128 位。不同算法设计的摘要长度本就不同,这是由算法本身的位宽决定的。你只需要根据使用场景(比如 Git 用 SHA-1,数字签名常用 SHA-256)选择对应的算法即可。

为什么我同一个文件用这个工具和另一个工具算出来的 SHA256 不一样?

几乎 100% 是因为输入内容有差异。比如:你在本工具粘贴的是带换行符的文本,另一个工具可能自动去掉了末尾换行;或者你在本工具里输入的是 UTF-8 编码,另一个工具默认用 GBK。SHA 系列算法是纯数学运算,相同字节输入必定输出相同值。建议在两个工具里都输入一个简单字符串(如 "abc")先验证,如果一致,说明是你原始输入的内容不一致。

这个工具算出来的哈希值能用来验证下载的文件吗?

可以,但需要确保你比对的是同一段内容。网页上的文件下载链接通常会附带一个 SHA256 值,那是整个二进制文件的哈希。如果你在本工具里直接粘贴了文件内容(如文本),而不是计算整个文件的二进制哈希,结果会不同。本工具目前只处理文本输入,不提供文件上传计算功能。要验证下载文件的完整性,建议使用专门的本地工具(如 certutil、sha256sum)直接对文件计算。

SHA-3 和 SHA-256 比,哪个更安全?

在目前已知的攻击下,两者都是安全的。SHA-3 是 NIST 在 2015 年发布的新标准,采用了与 SHA-2 系列完全不同的海绵结构,理论上能更好地抵抗未来可能出现的新型攻击。SHA-256 经过更长时间的大规模使用验证,目前也没有实际破解案例。如果你没有特别的安全合规要求(比如某些政务系统指定用 SHA-3),日常使用 SHA-256 完全足够,兼容性也更好。

我输入中文后算出来的结果,和同事用 Mac 算的不一样,这是编码问题吗?

对,大概率是编码不一致。SHA 算法是对字节进行运算,同样的汉字在不同编码下(UTF-8、GBK、GB2312)会得到完全不同的哈希值。本工具默认按 UTF-8 编码处理输入。如果你的同事使用 Mac 终端或某些旧软件,可能默认用了其他编码。解决方法:双方确认使用相同编码(推荐统一用 UTF-8),或者让同事在输入前将文件/文本另存为 UTF-8 格式。

这个工具算出来的哈希值,别人能反推出我的原始密码吗?

不能。SHA 系列是单向哈希函数,从哈希值反推出原始输入在计算上不可行。但这不代表存储密码就安全——如果密码太简单(如 "123456"),攻击者可以通过彩虹表或字典攻击,将常见密码的哈希值与你存储的哈希值做比对。因此,服务端存储密码时,除了用 SHA-256 这类算法,还必须加盐(salt)并多次迭代(如 bcrypt、PBKDF2)。本工具只做纯哈希计算,不涉及加盐。

为什么我输完内容后,页面没有反应,也没有报错?

可能是输入内容过大导致浏览器主线程卡顿。本工具完全在浏览器本地运行(不经过服务器),当输入字符串非常长(例如几十万字符)时,计算哈希会占用大量 CPU 时间,浏览器界面可能暂时无响应。建议:先输入少量字符测试功能是否正常;如果确实需要处理大文本,可以拆分成多个小段分别计算,或者等待几秒让计算完成。如果页面完全卡死,刷新后尝试输入更少的内容。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭