跳到正文
BCBinary Code Translator
菜单

密码学工具

文本与文件 SHA 哈希生成器

使用浏览器 Web Crypto 为 UTF-8 文本或本地文件计算 SHA-1、SHA-256、SHA-384、SHA-512,并输出 Hex 或 Base64。

文本和文件仅在当前浏览器操作中处理。SHA-1 只用于旧系统兼容,不建议用于新的抗碰撞安全场景。

如何计算 SHA 摘要

选择文本或文件、算法和输出编码后生成。文本会先编码为 UTF-8;文件模式读取本地文件的原始字节并交给 SubtleCrypto.digest,不会先转成文本。

  1. 选择文本或文件。文件内容不会经过字符解码。
  2. 新的一般用途通常选择 SHA-256;只有协议明确要求时选择 SHA-384 或 SHA-512。
  3. 常见校验值展示用十六进制,需要更紧凑传输时按协议选择 Base64。
  4. 比较完整摘要与可信来源。匹配支持完整性,但预期摘要本身还需要可信渠道。

案例与预期行为

输入 输出 说明
abc + SHA-1 a9993e364706816aba3e25717850c26c9cd0d89d 标准向量,仅用于兼容测试。
abc + SHA-256 ba7816bf8f01cfea414140de5dae2223… SHA-256 为 256 位,即 64 个十六进制字符。
abc + SHA-384 cb00753f45a35e8bb5a03d699ac6500… SHA-384 为 384 位,即 96 个十六进制字符。
abc + SHA-512 ddaf35a193617abacc417349ae204131… SHA-512 为 512 位,即 128 个十六进制字符。
你好(UTF-8) 确定性 SHA 摘要 文本按 UTF-8 字节哈希,不按 UTF-16 代码单元。
本地文件 文件精确字节的摘要 任意一个字节、内嵌元数据或换行变化都会改变结果。

哈希函数与确定性结果

密码学哈希把任意长度输入映射成固定长度摘要。同一字节序列总是得到同一结果,输入轻微变化应产生完全不同的摘要。摘要不包含可逆原文。

确定性适合完整性检查、内容寻址、缓存键和构建记录,但不意味着低熵秘密会被安全隐藏。攻击者可以枚举候选密码并比较摘要,密码存储必须使用带盐且计算缓慢的专用算法。

  • SHA-256 输出 32 字节。
  • Hex 每字节用两个字符。
  • Base64 只是同一摘要字节的另一种文本表示。

算法选择与 SHA-1 警告

SHA-256、SHA-384 和 SHA-512 属于 SHA-2。应选择校验值、API 或标准明确指定的算法,不同算法的摘要不能互换。更长并不自动代表周边协议实现正确。

SHA-1 仅为旧系统和历史校验值保留。实际碰撞攻击使它不适合新的签名、证书、软件分发和对抗性完整性决策。需要安全时应迁移到 SHA-256 或更强的合规构造。

  • 不要用 SHA-1 对抗有能力的攻击者。
  • 不要只凭摘要长度猜算法。
  • HMAC 与普通哈希不同,需要密钥。

文本编码与文件原始字节

文本使用 TextEncoder 转为 UTF-8。视觉相同的字符串可能因 Unicode 规范化、不可见字符、尾随空格和换行不同而产生不同字节。本工具不做规范化。其他系统若使用 UTF-16 或旧编码,结果也会不同。

文件模式对 File.arrayBuffer 返回的字节计算摘要,不把文件名、MIME 类型和修改时间加入输入,除非这些信息本身写在文件内容中。重新保存图片或文档可能改变内嵌元数据;CRLF 与 LF 是文本文件常见差异。

  • 精确保留末尾换行和空格。
  • 排查不匹配时先比较文件大小。
  • 协议哈希人类文本时应记录编码和规范化规则。

完整性与信任模型

摘要匹配说明两份输入在所选算法下极可能字节相同,但不证明是谁创建了文件,也不证明预期摘要可信。如果攻击者能同时替换下载文件和网页上的摘要,普通哈希比较无法提供真实性。

预期摘要应来自签名发布清单、可信包管理元数据或其他认证渠道。共享密钥消息认证使用 HMAC,公开软件来源验证使用数字签名和可信公钥。哈希只是构件,安全结论由信任链决定。

  • 比较完整摘要,不要只比短前缀。
  • 安全代码中采用常量时间比较。
  • 保存摘要时同时记录算法。

常见用途与排查流程

适合验证下载文件、比较两个导出是否相同、记录构建产物、生成缓存键和检查标准向量。本地文件哈希无需上传,文本哈希可排查 API 规范化和编码差异。

要复现结果,应记录原始输入、算法、输出编码以及文本规范化规则。摘要不一致时先检查字节长度、换行、Unicode、压缩和内嵌元数据,不要在工单中粘贴敏感原文。

  • 验证可信发布者提供的校验值。
  • 不上传即可比较本地文件。
  • 实现密码学功能时检查标准向量。
  • 排查 UTF-8 与其他编码差异。

浏览器限制与非目标

必须有 Web Crypto;不可用时会失败,不会使用未经审查的纯 JavaScript 实现。文件会整体读入内存,因此多 GB 文件可能占用大量内存,应该使用流式原生工具。

本页不破解哈希、不加密、不签名、不识别未知算法,也不用于密码存储。它不会上传文件到恶意软件数据库。输出只是所选算法对输入字节的摘要。

  • 用户选择文件前页面不会读取任何文件。
  • 清空表单不能清除操作系统缓存。
  • 密码使用 Argon2、scrypt 或 bcrypt 等专用方案。

与 HMAC 和 UUID 的区别

普通哈希没有密钥,任何拿到数据的人都能重算;HMAC 把密钥与消息结合,用于共享密钥真实性和完整性。UUID v4 是随机标识,与内容无关,不能检查内容是否变化。

校验和用哈希,带密钥认证用 HMAC,公开可验证真实性用数字签名,随机标识用 UUID。虽然输出都像长字符串,但不能互相替代。

常见问题

文件会上传吗?

不会。浏览器读取所选文件并在当前标签页交给 Web Crypto,本实现不主动把文件字节或摘要发送到服务器。

应该选择哪个算法?

按协议或校验来源指定。新的通用完整性流程常用 SHA-256;特定标准可能要求 SHA-384 或 SHA-512。新的抗碰撞场景不要选择 SHA-1。

为什么相同可见文本在其他地方摘要不同?

实际字节可能因 UTF-8 与其他编码、Unicode 规范化、隐藏字符、尾随空格或 CRLF/LF 不同。本页按原样对 UTF-8 文本哈希。

可以反向恢复 SHA 输入吗?

哈希不是可逆编码,但低熵输入可以被枚举猜测。这也是普通快速 SHA 不能直接存密码的原因。

摘要匹配能证明文件真实吗?

只能相对预期摘要证明完整性。如果预期摘要来自不可信渠道,攻击者可能同时替换两者。应使用签名清单或可信包元数据。

为什么还提供 SHA-1?

部分旧系统和历史校验列表仍要求。界面明确标记为兼容用途,因为实际碰撞攻击已使其不适合新的安全决策。

相关开发工具

Cookie 偏好设置

管理你的 Cookie 偏好。必要 Cookie 无法关闭。

必要 Cookie

必要

用于语言选择、隐私选择和网站基础功能,属于必需项。

Cookie: NEXT_LOCALE

分析 Cookie

可选的分析 Cookie 可帮助我们了解访问情况并改进网站。

Cookie: _ga, _gid, _gat, _clck, _clsk

广告 Cookie

可选的广告 Cookie 可能用于展示相关广告并衡量广告效果。

Cookie: __gads, _gcl_au, IDE