SubtleCrypto:digest() 方法

基线 广泛可用

此功能已经很成熟,并且可以在许多设备和浏览器版本上正常工作。它自 2015 年 7 月.

报告反馈

安全上下文:此功能仅在 安全上下文(HTTPS)中,以及一些或所有 支持的浏览器 中可用。

digest() 方法是 SubtleCrypto 接口的方法,用于生成给定数据的 摘要。摘要是从一些可变长度输入得出的短固定长度值。加密摘要应该具有抗碰撞性,这意味着很难找到两个具有相同摘要值的不同的输入。

它接受用于摘要算法的标识符和要摘要的数据作为参数。它返回一个 Promise,该 promise 将被摘要值完成。

语法

请注意,此 API 不支持流式输入:您必须在将数据传递到摘要函数之前将所有输入读取到内存中。
digest(algorithm, data)

js

参数

algorithm

  • 这可以是一个字符串,也可以是一个具有单个属性 name 的对象,该属性是一个字符串。该字符串指定要使用的哈希函数。支持的值有
  • "SHA-1"(但在加密应用中不要使用此方法)
  • "SHA-256"
  • "SHA-384".
"SHA-512"

data

一个 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

另请参阅