deriveBits
它接受基础密钥、要使用的派生算法以及要派生比特的长度作为参数。它返回一个 Promise,该 Promise 将以包含派生比特的 ArrayBuffer
来实现。此比特数组可用作加密或解密的密钥或共享密钥。
使用
deriveBits(algorithm, baseKey, length)
参数
名称 | 类型 | 描述 |
---|---|---|
algorithm | EcdhKeyDeriveParams | 定义要使用的派生算法的对象。 |
baseKey | CryptoKey | 表示派生算法的输入。目前只能是私有的 ECDH 密钥。 |
length | number | 可选。要派生比特的长度。目前仅支持 8 的倍数。 |
支持的算法
ECDH | HKDF | PBKDF2 |
---|---|---|
✅ EcdhKeyDeriveParams | ❌ | ❌ |
返回值
一个 Promise
,它解析为包含派生比特的新 ArrayBuffer
。
示例
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);
};