菜单
开源

exportKey

exportKey() 方法接受 CryptoKey 对象作为输入,并将其导出为外部、可移植的格式。

请注意,要导出密钥,它必须在创建时将 extractable 标志设置为 true

用法

exportKey(format, key)

参数

名称类型描述
formatstring定义密钥应导出的数据格式。数据格式可能因算法和密钥类型而异。当前支持的格式有 rawjwkspkipkcs8
keyCryptoKey要导出的 密钥

支持的算法

AES-CBCAES-CTRAES-GCMAES-KWECDHECDSAHMACRSA-OAEPRSASSA-PKCS1-v1_5RSA-PSS
AesCbcParamsAesCtrParamsAesGcmParamsEcdhKeyDeriveParamsEcdsaParamsHmacKeyGenParamsRsaHashedImportParamsRsaHashedImportParamsRsaHashedImportParams

支持的格式

  • ECDHECDSA 算法支持 pkcs8spkirawjwk 格式。
  • RSA-OAEPRSASSA-PKCS1-v1_5RSA-PSS 算法支持 pkcs8spkijwk 格式。
  • AES-*HMAC 算法目前支持 rawjwk 格式。

返回值

一个 Promise,解析为一个包含密钥的新 ArrayBufferJsonWebKey 对象/字典。

抛出

类型描述
InvalidAccessError尝试导出不可提取的密钥时抛出。
NotSupportedError尝试以未知格式导出时抛出。
TypeError尝试使用无效格式时抛出。

示例

JavaScript
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));
}