--- title: SubtleCrypto.decrypt() slug: Web/API/SubtleCrypto/decrypt translation_of: Web/API/SubtleCrypto/decrypt ---
{{APIRef("Web Crypto API")}}
SubtleCrypto.decrypt()
以加密数据、算法和密钥为参数返回一个包含明文的 {{jsxref("Promise")}} 对象。
var result = crypto.subtle.decrypt(algorithm, key, data)
;
algorithm
是一个对象,用于指定解密函数及其参数。当没有参数时,algorithm 也可以是包含了算法名称的 {{domxref("DOMString")}} 对象。支持的值¹ 如下:
{"name": "AES-CBC", iv}
iv
与 {{domxref("SubtleCrypto.encrypt()")}} 中描述的相同。{"name": "AES-CTR", counter, length}
counter
和length
与 {{domxref("SubtleCrypto.encrypt()")}} 中描述的相同{"name": "AES-GCM", iv[, additionalData, tagLength]}
iv
, additionalData
和 tagLength
与 {{domxref("SubtleCrypto.encrypt()")}} 中描述的相同。{"name": "RSA-OAEP"[, label]}
label
与 {{domxref("SubtleCrypto.encrypt()")}} 中描述的相同。key
是一个包含了密钥的 {{domxref("CryptoKey")}} 对象,用于解密。data
是一个包含了待解密的密文的 {{domxref("BufferSource")}} 对象。result
是一个 {{jsxref("Promise")}} 对象,它会返回由{{glossary("ciphertext")}} 解密的得来的 {{glossary("plaintext")}}。Promise 将会在以下的异常被触发时返回 rejected:
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
的含义在 {{domxref("SubtleCrypto.encrypt()")}} 中可以找到。ctBuffer
是 {{domxref("SubtleCrypto.encrypt()")}} 返回的密文。
Specification | Status | Comment |
---|---|---|
{{ SpecName('Web Crypto API', '#SubtleCrypto-method-decrypt', 'SubtleCrypto.decrypt()') }} | {{ Spec2('Web Crypto API') }} | Initial definition. |
{{Compat("api.SubtleCrypto.decrypt")}}