使用方法
- 将脚本或样式表的文本粘贴到“文件内容”中,或在“或选择文件”下选择文件。
- 选择“算法”。选择“三种全部使用”,即可为每种算法各写出一个值。
- 按页面加载文件的方式,准确输入“文件地址”。要粘贴的元素会显示在下方。
- 将“完整性值”或“要粘贴的元素”复制到页面中。若要核对已有的值,请把它粘贴到“要核对的完整性值”下。
完整性值如何生成
完整性值由哈希算法的名称、一个连字符,以及文件摘要的 base64 编码组成。浏览器对文件的字节逐一计算哈希,因此只要改变一个字节,值就会改变。所有符合标准的浏览器都支持 sha256、sha384 和 sha512(SRI 第3.2节)。Base64 使用 RFC 4648 的字母表,末尾以 = 号作填充(第4节)。
值中可以包含多个以空格分隔的项(第3.2.1节)。浏览器采用其所识别的各项中最强的算法,因此 sha512 优先于 sha256。
integrity = algorithm + "-" + base64(digest(bytes))
- sha256:连字符之后为44个 base64 字符。
- sha384:连字符之后为64个字符。
- sha512:连字符之后为88个字符。
核对的作用与不能涵盖的内容
当文件的字节得出属性中最强算法的某个值时,核对即通过(SRI 第3.3节)。浏览器不认识的算法所对应的项会被跳过。若没有剩下任何项,核对会在不做比较的情况下通过,因此本工具会把这种情况报告为未核对。
该值并不说明文件来自何处,它只证明文件具有被计算过哈希的那些字节。每当文件变化时,例如库更新之后,请重新生成该值,并让它与元素保存在一起。
示例文本 abc
文本 abc 在 UTF-8 中是三个字节61 62 63。选择 sha256,并在文本框中输入 abc。该文本的完整性值即为下表中的值;要粘贴的元素会附带该值,并将 crossorigin 设为 anonymous。
| 算法 | abc 的完整性值 |
|---|---|
| sha256 | sha256-ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0= |
| sha384 | sha384-ywB1P0WjXou1oD1pmsZQBycsMqsO3tFjGotgWkP/W+2AhgcroefMI1i67KE0yCWn |
常见问题
文件变化时,我是否必须更改该值?
是的。该值只对应一个确定的字节序列,因此即使只改动了一个空格,库的更新也会得到不同的值。在属性中写入新值之前,核对都会失败。
应该选择哪种算法?
所有浏览器都支持这三种算法(SRI 第3.2节)。sha384 比 sha256 更强,而它的值又比 sha512 短。若选择“三种全部使用”,即可为每种算法写出一个值,浏览器会核对最强的那一个。
为什么值中有算法名称和一个连字符?
名称告诉浏览器应计算哪种摘要。连字符用来结束名称,因为算法名称中没有连字符,而 base64 值的 URL 安全字母表中可能含有连字符,SRI 第3.5节允许这样做。
本工具会把我的文件发送到服务器吗?
不会。您的浏览器读取文件,并用浏览器的摘要方法(crypto.subtle)计算哈希。页面不发出任何网络请求,也不保存您输入或选择的任何内容。
为什么要粘贴的元素中包含 crossorigin?
对于另一来源的资源,SRI 要求使用 CORS(第5.3节),而将 crossorigin 设为 anonymous 即要求浏览器使用 CORS。元素对脚本和样式表都包含这一属性。
资料来源
- W3C,Subresource Integrity(工作草案,2026年3月20日):第3.2、3.3、3.5和5.3节(英文)
- RFC 4648,The Base16, Base32, and Base64 Data Encodings,第4节(英文)
- MDN,SubtleCrypto.digest()(英文)
数据和文字最近核对于2026年11月10日星期二。