← 中文资源

简体中文版本

使用 Web Crypto 计算文本 SHA-256 摘要

通过 Web Crypto 对字符串或字节数组计算 SHA-256,并输出适合完整性校验的小写十六进制摘要。

阅读英文原文

功能说明

SHA-256 常用于校验内容完整性和生成稳定标识。该函数通过 Web Crypto 的 subtle.digest 计算摘要,接受字符串或字节数组,输出 64 位小写十六进制,可直接与已知哈希比较。verifySha256 额外校验期望值的格式,适合缓存键、文件校验和内容寻址场景。

关键代码

字符串先用 TextEncoder 转为 UTF-8 字节。crypto.subtle.digest 返回 ArrayBuffer,随后转成 Uint8Array,每个字节用 toString(16) 并补足两位,最后拼接。函数为异步,因为 Web Crypto 接口返回 Promise;相同输入始终得到相同摘要。

const digest = await crypto.subtle.digest("SHA-256", bytes);
return Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, "0")).join("");

使用注意

SHA-256 不是密码哈希,不能直接存储密码,应使用 scrypt、Argon2 等带盐慢哈希。该函数不提供密钥,不能替代 HMAC。Web Crypto 在非安全上下文可能不可用。输入类型受限,其他 ArrayBufferView 需先转换。比较摘要使用普通相等即可,摘要本身不是秘密。

验证方式

断言 sha256Hex(“abc”) 返回 ba7816bf 开头的标准摘要,sha256Hex(“”) 返回 e3b0c442 开头的摘要。同一输入多次结果一致。Uint8Array 输入与等价字符串结果一致。verifySha256 对正确摘要返回 true,对 63 位或非十六进制输入抛 RangeError。