SubtleCrypto: decrypt() 方法

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2020 年 1 月⁩ 起,所有主流浏览器均已支持。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

注意:此功能在 Web Workers 中可用。

SubtleCrypto 接口的 decrypt() 方法用于解密一些加密数据。它接受以下参数:一个用于解密的 密钥,一些可选的额外参数,以及要解密的数据(也称为“密文”)。它返回一个 Promise,该 Promise 将以解密后的数据(也称为“明文”)完成。

语法

js
decrypt(algorithm, key, data)

参数

algorithm

一个指定要使用的 算法 的对象,以及任何必需的额外参数。为额外参数提供的值必须与相应 encrypt() 调用中传递的值匹配。

key

一个包含用于解密的密钥的 CryptoKey 对象。如果使用 RSA-OAEP,这是 CryptoKeyPair 对象中的 privateKey 属性。

data

一个 ArrayBuffer、一个 TypedArray 或一个 DataView,其中包含要解密的数据(也称为 密文)。

返回值

一个 Promise,该 Promise 以包含明文的 ArrayBuffer 来完成。

异常

当遇到以下异常时,Promise 会被拒绝:

InvalidAccessError DOMException

当所请求的操作对于提供的密钥无效时抛出(例如,无效的加密算法,或指定的加密算法的密钥无效)。

OperationError DOMException

当操作因特定于操作的原因而失败时抛出(例如,算法参数大小无效,或解密密文时出错)。

支持的算法

decrypt() 方法支持与 encrypt() 方法相同的算法。

示例

注意: 你可以在 GitHub 上 尝试工作示例

RSA-OAEP

此代码使用 RSA-OAEP 解密 ciphertext在 GitHub 上查看完整代码。

js
function decryptMessage(privateKey, ciphertext) {
  return window.crypto.subtle.decrypt(
    { name: "RSA-OAEP" },
    privateKey,
    ciphertext,
  );
}

AES-CTR

此代码在 CTR 模式下使用 AES 解密 ciphertext。请注意,counter 必须与加密时使用的值匹配。 在 GitHub 上查看完整代码。

js
function decryptMessage(key, ciphertext) {
  return window.crypto.subtle.decrypt(
    { name: "AES-CTR", counter, length: 64 },
    key,
    ciphertext,
  );
}

AES-CBC

此代码在 CBC 模式下使用 AES 解密 ciphertext。请注意,iv 必须与加密时使用的值匹配。 在 GitHub 上查看完整代码。

js
function decryptMessage(key, ciphertext) {
  // The iv value is the same as that used for encryption
  return window.crypto.subtle.decrypt({ name: "AES-CBC", iv }, key, ciphertext);
}

AES-GCM

此代码在 GCM 模式下使用 AES 解密 ciphertext。请注意,iv 必须与加密时使用的值匹配。 在 GitHub 上查看完整代码。

js
function decryptMessage(key, ciphertext) {
  // The iv value is the same as that used for encryption
  return window.crypto.subtle.decrypt({ name: "AES-GCM", iv }, key, ciphertext);
}

规范

规范
Web 加密级别 2
# SubtleCrypto-method-decrypt

浏览器兼容性

另见