Web Crypto API

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

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

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

Web Crypto API 是一种接口,允许脚本使用加密原语来构建使用加密的系统。

一些浏览器曾实现过一个名为 Crypto 的接口,但它定义不明确且在加密方面不严谨。为了避免混淆,在实现 Web Crypto API 的浏览器中,此接口的方法和属性已被移除,所有 Web Crypto API 的方法都可以在一个新的接口上获得:SubtleCryptoCrypto.subtle 属性提供了访问实现该接口的对象的途径。

警告: Web Crypto API 提供了一系列低级加密原语。非常容易误用它们,并且其中涉及的陷阱可能非常隐蔽。

即使您正确使用了基本的加密函数,安全的密钥管理和整体安全系统设计也极其难以做到完美,并且通常是安全专家领域的专业知识。

安全系统设计和实现的错误可能导致系统的安全性完全失效。

请学习并进行实验,但在经过精通此主题的专业人士的彻底审查之前,不要保证或暗示您的工作的安全性。Crypto 101 课程是开始学习安全系统设计和实现的绝佳起点。

接口

Crypto

提供基本的加密功能,例如加密强度的随机数生成器,以及通过 SubtleCrypto 对象访问加密原语。可以通过主线程作用域的全局对象 Window.crypto 或工作线程作用域的全局对象 WorkerGlobalScope.crypto 来访问此类型的对象。

SubtleCrypto

表示一个提供低级加密功能的对象的接口,用于密钥生成、加密、解密、密钥包装和解包等。

CryptoKey

表示一个加密 密钥,该密钥是从 SubtleCrypto 方法 generateKey()deriveKey()importKey()unwrapKey() 中获得的。

字典

AesCbcParams

表示当使用 AES-CBC 算法时,应作为 `algorithm` 参数传递给 SubtleCrypto.encrypt()SubtleCrypto.decrypt()SubtleCrypto.wrapKey()SubtleCrypto.unwrapKey() 的对象。

AesCtrParams

表示当使用 AES-CTR 算法时,应作为 `algorithm` 参数传递给 SubtleCrypto.encrypt()SubtleCrypto.decrypt()SubtleCrypto.wrapKey()SubtleCrypto.unwrapKey() 的对象。

AesGcmParams

表示当使用 AES-GCM 算法时,应作为 `algorithm` 参数传递给 SubtleCrypto.encrypt()SubtleCrypto.decrypt()SubtleCrypto.wrapKey()SubtleCrypto.unwrapKey() 的对象。

AesKeyGenParams

表示当生成 AES 密钥时,应作为 `algorithm` 参数传递给 SubtleCrypto.generateKey() 的对象:即当算法被标识为 AES-CBCAES-CTRAES-GCMAES-KW 之一时。

CryptoKeyPair

表示用于非对称加密算法的公钥和私钥对。

EcKeyGenParams

表示当生成任何基于椭圆曲线的密钥对时,应作为 `algorithm` 参数传递给 SubtleCrypto.generateKey() 的对象:即当算法被标识为 ECDSAECDH 时。

EcKeyImportParams

表示当生成任何基于椭圆曲线的密钥对时,应作为 `algorithm` 参数传递给 SubtleCrypto.importKey()SubtleCrypto.unwrapKey() 的对象:即当算法被标识为 ECDSAECDH 时。

EcdhKeyDeriveParams

表示当使用 ECDH 算法时,应作为 `algorithm` 参数传递给 SubtleCrypto.deriveKey() 的对象。

EcdsaParams

表示当使用 ECDSA 算法时,应作为 `algorithm` 参数传递给 SubtleCrypto.sign()SubtleCrypto.verify() 的对象。

HkdfParams

表示当使用 HKDF 算法时,应作为 `algorithm` 参数传递给 SubtleCrypto.deriveKey() 的对象。

HmacImportParams

表示当生成 HMAC 算法的密钥时,应作为 `algorithm` 参数传递给 SubtleCrypto.importKey()SubtleCrypto.unwrapKey() 的对象。

HmacKeyGenParams

表示当生成 HMAC 算法的密钥时,应作为 `algorithm` 参数传递给 SubtleCrypto.generateKey() 的对象。

Pbkdf2Params

表示当使用 PBKDF2 算法时,应作为 `algorithm` 参数传递给 SubtleCrypto.deriveKey() 的对象。

RsaHashedImportParams

表示当导入任何基于 RSA 的密钥对时,应作为 `algorithm` 参数传递给 SubtleCrypto.importKey()SubtleCrypto.unwrapKey() 的对象:即当算法被标识为 RSASSA-PKCS1-v1_5RSA-PSSRSA-OAEP 之一时。

RsaHashedKeyGenParams

表示当生成任何基于 RSA 的密钥对时,应作为 `algorithm` 参数传递给 SubtleCrypto.generateKey() 的对象:即当算法被标识为 RSASSA-PKCS1-v1_5RSA-PSSRSA-OAEP 之一时。

RsaOaepParams

表示当使用 RSA_OAEP 算法时,应作为 `algorithm` 参数传递给 SubtleCrypto.encrypt()SubtleCrypto.decrypt()SubtleCrypto.wrapKey()SubtleCrypto.unwrapKey() 的对象。

RsaPssParams

表示当使用 RSA-PSS 算法时,应作为 `algorithm` 参数传递给 SubtleCrypto.sign()SubtleCrypto.verify() 的对象。

其他接口的扩展

Window.crypto

表示与主线程作用域中的全局对象关联的 Crypto 对象。

WorkerGlobalScope.crypto

表示与工作线程作用域中的全局对象关联的 Crypto 对象。

规范

规范
Web 加密级别 2
# crypto-interface

浏览器兼容性