SubtleCrypto:digest() 方法
基线 广泛可用
此功能已经很成熟,并且可以在许多设备和浏览器版本上正常工作。它自 2015 年 7 月.
报告反馈
安全上下文:此功能仅在 安全上下文(HTTPS)中,以及一些或所有 支持的浏览器 中可用。
digest()
方法是 SubtleCrypto
接口的方法,用于生成给定数据的 摘要。摘要是从一些可变长度输入得出的短固定长度值。加密摘要应该具有抗碰撞性,这意味着很难找到两个具有相同摘要值的不同的输入。
它接受用于摘要算法的标识符和要摘要的数据作为参数。它返回一个 Promise
,该 promise 将被摘要值完成。
语法
请注意,此 API 不支持流式输入:您必须在将数据传递到摘要函数之前将所有输入读取到内存中。
digest(algorithm, data)
js
一个 ArrayBuffer
、一个 TypedArray
或一个 DataView
对象,其中包含要摘要的数据。
返回值
支持的算法
一个 Promise
,它用包含摘要的 ArrayBuffer
完成。
摘要算法,也称为 加密哈希函数,将任意长度的数据块转换为固定大小的输出,通常比输入短得多。它们在密码学中具有多种应用。 | 算法 | 输出长度(位) | 块大小(位) |
---|---|---|---|
规范 | 160 | 512 | SHA-1 |
FIPS 180-4,第 6.1 节 | 256 | 512 | SHA-256 |
FIPS 180-4,第 6.2 节 | 384 | 1024 | SHA-384 |
FIPS 180-4,第 6.5 节 | 512 | 1024 | SHA-512 |
FIPS 180-4,第 6.4 节
警告:SHA-1 现在被认为容易受到攻击,不应在加密应用中使用。
示例
注意:如果您在这里寻找如何创建带密钥的哈希消息认证码(HMAC),您需要使用 SubtleCrypto.sign() 方法。
有关使用 digest()
API 的更多示例,请参阅 SubtleCrypto 的非加密用途。
基本示例
请注意,此 API 不支持流式输入:您必须在将数据传递到摘要函数之前将所有输入读取到内存中。
const text =
"An obscure body in the S-K System, your majesty. The inhabitants refer to it as the planet Earth.";
async function digestMessage(message) {
const encoder = new TextEncoder();
const data = encoder.encode(message);
const hash = await window.crypto.subtle.digest("SHA-256", data);
return hash;
}
digestMessage(text).then((digestBuffer) =>
console.log(digestBuffer.byteLength),
);
此示例对消息进行编码,然后计算其 SHA-256 摘要,并记录摘要长度。
将摘要转换为十六进制字符串
请注意,此 API 不支持流式输入:您必须在将数据传递到摘要函数之前将所有输入读取到内存中。
const text =
"An obscure body in the S-K System, your majesty. The inhabitants refer to it as the planet Earth.";
async function digestMessage(message) {
const msgUint8 = new TextEncoder().encode(message); // encode as (utf-8) Uint8Array
const hashBuffer = await window.crypto.subtle.digest("SHA-256", msgUint8); // hash the message
const hashArray = Array.from(new Uint8Array(hashBuffer)); // convert buffer to byte array
const hashHex = hashArray
.map((b) => b.toString(16).padStart(2, "0"))
.join(""); // convert bytes to hex string
return hashHex;
}
digestMessage(text).then((digestHex) => console.log(digestHex));
规范
块大小(位) |
---|
摘要以 ArrayBuffer 的形式返回,但为了比较和显示,摘要通常以十六进制字符串的形式表示。此示例计算摘要,然后将 ArrayBuffer 转换为十六进制字符串。 # Web Cryptography API |
浏览器兼容性
SubtleCrypto-method-digest
另请参阅
- SubtleCrypto 的非加密用途
- Chromium 安全来源规范
- FIPS 180-4 指定了 SHA 系列摘要算法。