菜单
开源

deriveBits

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

使用

deriveBits(algorithm, baseKey, length)

参数

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

支持的算法

ECDHHKDFPBKDF2
EcdhKeyDeriveParams

返回值

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

示例

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