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

瀏覽器相容性

另見