菜单
开源

deriveBits

注意

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

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

它接受基础密钥、要使用的派生算法以及要派生的比特长度作为参数。它返回一个 Promise,该 Promise 将使用包含派生比特的 ArrayBuffer 来完成。这组比特可以用作加密或解密的密钥,作为共享秘密。

使用

deriveBits(algorithm, baseKey, length)

参数

名称类型描述
algorithmEcdhKeyDeriveParams定义要使用的派生算法的对象。
baseKeyCryptoKey表示派生算法的输入。目前只能是私有 ECDH 密钥。
lengthnumber可选。要派生比特的长度。目前只支持 8 的倍数。

支持的算法

ECDHHKDFPBKDF2
EcdhKeyDeriveParams

返回值

一个 Promise,它解析为一个包含派生比特的新 ArrayBuffer

示例

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

export default async function () {
  // Generate a key pair for Alice
  const aliceKeyPair = await crypto.subtle.generateKey(
    {
      name: 'ECDH',
      namedCurve: 'P-256',
    },
    true,
    ['deriveKey', 'deriveBits']
  );

  // Generate a key pair for Bob
  const bobKeyPair = await crypto.subtle.generateKey(
    {
      name: 'ECDH',
      namedCurve: 'P-256',
    },
    true,
    ['deriveKey', 'deriveBits']
  );

  // Derive shared secret for Alice
  const aliceSharedSecret = await deriveSharedSecret(aliceKeyPair.privateKey, bobKeyPair.publicKey);

  // Derive shared secret for Bob
  const bobSharedSecret = await deriveSharedSecret(bobKeyPair.privateKey, aliceKeyPair.publicKey);

  console.log('alice shared secret: ' + printArrayBuffer(aliceSharedSecret));
  console.log('bob shared secret: ' + printArrayBuffer(bobSharedSecret));
}

async function deriveSharedSecret(privateKey, publicKey) {
  return crypto.subtle.deriveBits(
    {
      name: 'ECDH',
      public: publicKey,
    },
    privateKey,
    256
  );
}

const printArrayBuffer = (buffer) => {
  const view = new Uint8Array(buffer);
  return Array.from(view);
};