deriveBits
注意
实验性模块
k6/experimental/webcrypto
已成熟,其功能现在通过crypto
对象全局可用。k6/experimental/webcrypto
已被弃用,并将在不久的将来移除。要迁移你的脚本,请移除
k6/experimental/webcrypto
的导入,并改用crypto
对象。
它接受基础密钥、要使用的派生算法以及要派生的比特长度作为参数。它返回一个 Promise,该 Promise 将使用包含派生比特的 ArrayBuffer
来完成。这组比特可以用作加密或解密的密钥,作为共享秘密。
使用
deriveBits(algorithm, baseKey, length)
参数
名称 | 类型 | 描述 |
---|---|---|
algorithm | EcdhKeyDeriveParams | 定义要使用的派生算法的对象。 |
baseKey | CryptoKey | 表示派生算法的输入。目前只能是私有 ECDH 密钥。 |
length | number | 可选。要派生比特的长度。目前只支持 8 的倍数。 |
支持的算法
ECDH | HKDF | PBKDF2 |
---|---|---|
✅ EcdhKeyDeriveParams | ❌ | ❌ |
返回值
一个 Promise
,它解析为一个包含派生比特的新 ArrayBuffer
。
示例
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);
};