SubtleCrypto.decrypt()

SubtleCrypto.decrypt() 以加密数据、算法和密钥为参数返回一个包含明文的 Promise 对象。

语法

var result = crypto.subtle.decrypt(algorithm, key, data);

属性

  • algorithm 是一个对象,用于指定解密函数及其参数。当没有参数时,algorithm 也可以是包含了算法名称的 DOMString 对象。支持的值¹ 如下:
  • key 是一个包含了密钥的 CryptoKey 对象,用于解密。
  • data 是一个包含了待解密的密文的 BufferSource 对象。

返回值

异常

Promise 将会在以下的异常被触发时返回 rejected:

InvalidAccessError

当提供的密钥无法执行请求的操作时(如:解密算法无效,或对指定的解密算法提供了无效的密钥)。

OperationError

因特定的操作原因导致操作失败时(如:算法的参数大小无效,或解密结果失败)。

实例

const decryptText = async (ctBuffer, iv, password) => {
    const pwUtf8 = new TextEncoder().encode(password);
    const pwHash = await crypto.subtle.digest('SHA-256', pwUtf8);

    const alg = { name: 'AES-GCM', iv: iv };
    const key = await crypto.subtle.importKey('raw', pwHash, alg, false, ['decrypt']);

    const ptBuffer = await crypto.subtle.decrypt(alg, key, ctBuffer);

    const plaintext = new TextDecoder().decode(ptBuffer);

    return plaintext;
}

iv 的含义在 SubtleCrypto.encrypt() 中可以找到。ctBufferSubtleCrypto.encrypt() 返回的密文。

规范

Specification
Web Cryptography API
# SubtleCrypto-method-decrypt

浏览器支持

BCD tables only load in the browser

另请参见