参考:https://developer.mozilla.org/zh-CN/docs/Web/API/SubtleCrypto
什么是SubtleCrypto
SubtleCrypto 接口提供了许多底层加密功能, 可以使用它来进行加密和密钥管理
创建SubtleCrypto对象
# 注意是小写的crypto
var cpt = crypto.subtle;
Chrome Console 测试如下
importKey() 和 wrapKey() 方法的使用
只说这两个方法是因为我只用到这两个方法, 更多的方法使用可以参考上面参考链接
importKey()
const result = crypto.subtle.importKey(
format,
keyData,
algorithm,
extractable,
keyUsages
);
format
是描述要导入密钥的数据格式的字符串。可以是以下之一:
raw
:原始格式。pkcs8
:PKCS#8格式。spki
:SubjectPublicKeyInfo格式。jwk
:JSON Web密钥格式。
keyData
是ArrayBuffer
,TypedArray,aDataView
或JSONWebKey
包含给定格式的键的对象。
algorithm
是一个字典对象,用于定义要导入的密钥的类型并提供额外的算法特定参数。
extractable
是Boolean
表明它是否将有可能使用到导出密钥
keyUsages
是Array
指示可以用钥匙做什么的指示。可能的数组值为:
encrypt
:该键可用于发送encrypt
消息。decrypt
:该键可用于发送decrypt
消息。sign
:该键可用于发送sign
消息。verify
:该密钥可用于verify
签名。deriveKey
:可以在中使用密钥deriving a new key
。deriveBits
:可以在中使用密钥deriving bits
。wrapKey
:该键可能用于wrap a key
。unwrapKey
:该键可能用于unwrap a key
。
该方法的返回值是一个Promise对象, 它作为一个CryptoKey对象来实现导入的密钥。
wrapKey()
const result = crypto.subtle.wrapKey(
format,
key,
wrappingKey,
wrapAlgo
);
format
是一个字符串,描述了在加密密钥之前将导出密钥的数据格式。可以是以下之一:raw
:原始格式。pkcs8
:PKCS#8格式。spki
:SubjectPublicKeyInfo格式。jwk
:JSON Web密钥格式。
key
是CryptoKey类型的
对象。wrappingkey
是CryptoKey类型的对象
用于加密导出的密钥。wrapAlgo
是一个对象,指定用于加密导出的密钥的算法以及任何所需的额外参数:- 要使用RSA-OAEP,请传递一个
RsaOaepParams
对象。 - 要使用AES-CTR,请传递一个
AesCtrParams
对象。 - 要使用AES-CBC,请传递一个
AesCbcParams
对象。 - 要使用AES-GCM,请传递一个
AesGcmParams
对象。 - 要使用AES-KW,请传递字符串
"AES-KW"
或形式的对象{ "name": "AES-KW }
。
- 要使用RSA-OAEP,请传递一个
该方法的返回值是一个Promise对象, 加密的结果是一个ArrayBuffer值