exportKey
exportKey()
方法接受 CryptoKey 对象作为输入,并将其导出为外部、可移植的格式。
请注意,要导出密钥,它必须在创建时将 extractable
标志设置为 true
。
用法
exportKey(format, key)
参数
名称 | 类型 | 描述 |
---|---|---|
format | string | 定义密钥应导出的数据格式。数据格式可能因算法和密钥类型而异。当前支持的格式有 raw 、jwk 、spki 和 pkcs8 。 |
key | CryptoKey | 要导出的 密钥。 |
支持的算法
AES-CBC | AES-CTR | AES-GCM | AES-KW | ECDH | ECDSA | HMAC | RSA-OAEP | RSASSA-PKCS1-v1_5 | RSA-PSS |
---|---|---|---|---|---|---|---|---|---|
✅ AesCbcParams | ✅ AesCtrParams | ✅ AesGcmParams | ❌ | ✅ EcdhKeyDeriveParams | ✅ EcdsaParams | ✅ HmacKeyGenParams | ✅ RsaHashedImportParams | ✅ RsaHashedImportParams | ✅ RsaHashedImportParams |
支持的格式
ECDH
和ECDSA
算法支持pkcs8
、spki
、raw
和jwk
格式。RSA-OAEP
、RSASSA-PKCS1-v1_5
和RSA-PSS
算法支持pkcs8
、spki
和jwk
格式。AES-*
和HMAC
算法目前支持raw
和jwk
格式。
返回值
一个 Promise
,解析为一个包含密钥的新 ArrayBuffer
或 JsonWebKey 对象/字典。
抛出
类型 | 描述 |
---|---|
InvalidAccessError | 尝试导出不可提取的密钥时抛出。 |
NotSupportedError | 尝试以未知格式导出时抛出。 |
TypeError | 尝试使用无效格式时抛出。 |
示例
export default async function () {
/**
* Generate a symmetric key using the AES-CBC algorithm.
*/
const generatedKey = await crypto.subtle.generateKey(
{
name: 'AES-CBC',
length: '256',
},
true,
['encrypt', 'decrypt']
);
/**
* Export the key in raw format.
*/
const exportedKey = await crypto.subtle.exportKey('raw', generatedKey);
/**
* Reimport the key in raw format to verify its integrity.
*/
const importedKey = await crypto.subtle.importKey('raw', exportedKey, 'AES-CBC', true, [
'encrypt',
'decrypt',
]);
console.log(JSON.stringify(importedKey));
}