菜单
开源

exportKey

注意

实验性模块 k6/experimental/webcrypto 已成熟,其功能现在通过 crypto 对象 全局可用。k6/experimental/webcrypto 已弃用,并将在不久的将来移除。

要迁移您的脚本,请移除 k6/experimental/webcrypto 导入,并改用 crypto 对象。

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

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

使用

exportKey(format, key)

参数

名称类型描述
format字符串定义密钥导出的数据格式。根据算法和密钥类型,数据格式可能有所不同。当前支持的格式有 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,解析为一个新的 ArrayBuffer 或一个包含密钥的 JsonWebKey 对象/字典。

抛出

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

示例

JavaScript
import { crypto } from 'k6/experimental/webcrypto';

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