概述HKDF 适合从主密钥派生短期会话密钥。本文展示派生与加解密流程。派生与加解密const supportsSubtle = !!(crypto && crypto.subtle);

async function deriveHKDF(secretRaw, salt, info = 'session') {

const enc = new TextEncoder();

const base = await crypto.subtle.importKey('raw', secretRaw, 'HKDF', false, ['deriveKey']);

const key = await crypto.subtle.deriveKey({ name: 'HKDF', hash: 'SHA-256', salt: enc.encode(salt), info: enc.encode(info) }, base, { name: 'AES-GCM', length: 256 }, true, ['encrypt','decrypt']);

return key;

}

async function encrypt(key, bytes) {

const iv = crypto.getRandomValues(new Uint8Array(12));

const buf = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, bytes);

return { iv, cipher: new Uint8Array(buf) };

}

async function decrypt(key, iv, cipher) {

const buf = await crypto.subtle.decrypt({ name: 'AES-GCM', iv }, key, cipher);

return new Uint8Array(buf);

}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部