简体中文

开发者工具 · SHA 哈希计算器

SubtleCrypto.digest 如何在浏览器中计算 SHA-256 哈希值

· 工作原理

SHA-256 密码学 浏览器 API

UTF-8 bytes 输入浏览器 SHA-256 摘要并保留为十六进制
原始 ToolAcre 矢量图

每个现代浏览器都可以通过 Web Crypto 本地哈希字节。这篇文章遵循从 TextEncoder 到 crypto.subtle.digest 到十六进制摘要的一个字符串,并解释了每个步骤的限制。

没有 npm install 的哈希 - 本机摘要击败捆绑库的情况

您可以计算短文本值的摘要,而无需安装哈希包或将数据发布到远程哈希网站。浏览器在安全来源上公开 crypto.subtle.digest 。哈希是确定性的固定长度字节指纹;它不会隐藏输入或证明是谁提供的。 ToolAcre 使用浏览器实现而不是提供手写的 SHA 算法,并将字符串在选项卡中进行哈希处理。

文本不是字节 - 在散列之前使用 TextEncoder 将输入编码为 UTF-8,以及为什么此步骤决定答案

文本“café”和输入散列的字节不是同一类型的对象。 TextEncoder 将字符串映射到 UTF-8 bytes (咖啡馆为 63 61 66 C3 A9),而天真的 Latin-1 转换将使用 E9 作为最终字符并生成不同的摘要。即使视觉上相同的文本也可以具有不同的 Unicode 规范化形式。在比较 JavaScript、CLI 和服务器之间的哈希值之前,就编码和规范化达成一致。 ToolAcre 的文本模式在哈希之前显式执行其 UTF-8 转换。

摘要调用 — crypto.subtle.digest 带有算法名称和 ArrayBuffer,以及为什么它返回一个承诺

crypto.subtle.digest("SHA-256", bytes) 返回 Promise,因为加密工作可能是异步的;在读取输出之前等待它。该方法采用整个输入缓冲区而不是流式迭代器。无论输入是三个字符还是三百万个字符,SHA-256 都会发出 256 bits (32 bytes)。安全上下文限制意味着 SubtleCrypto API 需要 HTTPS 或 localhost,并且该工具会报告其不存在,而不是发明后备。

从 ArrayBuffer 到 hex — 将结果字节转换为人们识别的 64 个字符的字符串

Promise 解析为字节的 ArrayBuffer,而不是熟悉的十六进制数字字符串。根据需要将每个字节转换为两个带有前导零的基数 16 字符,为 SHA-256 生成正好 64 个小写字符。此十六进制表示形式使 32 bytes 的长度加倍,但不会更改摘要。 Base64 可以更紧凑地表示相同的 32 bytes ;只有在确认算法、输入编码和输出表示匹配后,比较才有意义。

工作示例 - 逐步散列一个短字符串,显示每个阶段的字节

对于 ASCII 文本 abc,UTF-8 生成字节 61 62 63。这些确切字节的 SHA-256 为 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad。在 ToolAcre 和另一个受信任的哈希实现中测试这一点:将 abc 更改为 abc 后跟换行符会产生不同的结果。如果输出不同,请在怀疑加密原语之前检查隐藏的空白和字节编码。显示的摘要是可重复的测试向量,而不是声称 abc 是秘密。

安全上下文 - 为什么 crypto.subtle 仅在 HTTPS 和 localhost 上可用

crypto.subtle 是一个安全上下文 API。生产 HTTPS 页面和本地主机开发页面通常会公开它;普通的不安全远程 HTTP 页面可能不会。该工具还需要足够的内存来保存输入和输出。在 Web Crypto 不可用的情况下,默默地切换到未经审查的 JavaScript 哈希将使安全敏感的结果依赖于不同的实现。明确失败并选择一个安全的环境。

这不包括 - 键控哈希 (HMAC) 和非常大输入的增量哈希,这是一次性摘要 API 不提供的

一次性摘要 API 不是针对大文件的增量哈希。 SHA-256 不是密码存储方案:快速的无盐哈希使猜测变得廉价,因此密码存储需要专门构建的、加盐的、故意昂贵的 KDF。 SHA-1 可能会显示用于旧的互操作性,但其抗冲突性已被破坏,并且对于新的完整性或签名系统来说不是一个好的选择。 HMAC 是密钥认证,与消化未经认证的字节不同。

要点:浏览器已经有一个哈希函数 - ToolAcre SHA 哈希计算器正是使用这个 API,所以它的输出是浏览器自己的

浏览器已经提供了 SHA-256:将文本编码为字节,等待摘要,然后格式化其结果以进行比较。 ToolAcre SHA 哈希计算器遵循该路径粘贴文本并将 SHA-1 标记为仅旧版。首先将 abc 与已知结果进行比较,然后对您了解其字节和编码的实际非敏感材料进行哈希处理。