核心价值使用原生 Web Crypto 实现高性能对称加密,避免第三方依赖。通过 HKDF 进行密钥派生,搭配随机 IV 与认证标签,提升整体安全性。实现export const runtime = 'edge'

async function hkdf(secret: string, salt: Uint8Array, info: string) {

const enc = new TextEncoder()

const ikm = await crypto.subtle.importKey('raw', enc.encode(secret), 'HKDF', false, ['deriveKey'])

return crypto.subtle.deriveKey({ name: 'HKDF', hash: 'SHA-256', salt, info: enc.encode(info) }, ikm, { name: 'AES-GCM', length: 256 }, false, ['encrypt', 'decrypt'])

}

async function encrypt(plain: Uint8Array, key: CryptoKey) {

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

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

return { iv: Buffer.from(iv).toString('base64'), data: Buffer.from(buf).toString('base64') }

}

async function decrypt(payload: { iv: string; data: string }, key: CryptoKey) {

const iv = Buffer.from(payload.iv, 'base64')

const data = Buffer.from(payload.data, 'base64')

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

return new Uint8Array(buf)

}

export async function POST(req: Request) {

const secret = 'master-secret'

const salt = crypto.getRandomValues(new Uint8Array(16))

const key = await hkdf(secret, salt, 'v1')

const body = new Uint8Array(await req.arrayBuffer())

const enc = await encrypt(body, key)

return Response.json({ salt: Buffer.from(salt).toString('base64'), ...enc }, { headers: { 'Cache-Control': 'no-store' } })

}

export async function PUT(req: Request) {

const json = await req.json()

const secret = 'master-secret'

const salt = Buffer.from(json.salt, 'base64')

const key = await hkdf(secret, new Uint8Array(salt), 'v1')

const dec = await decrypt({ iv: json.iv, data: json.data }, key)

return new Response(dec, { headers: { 'Content-Type': 'application/octet-stream', 'Cache-Control': 'no-store' } })

}

治理建议主密钥应存储于安全环境变量或 KMS;HKDF 信息串区分版本与用途。IV 使用 12 字节随机值;输出携带 salt/iv/data 并通过 HTTPS 传输。结论原生 Web Crypto 在 Edge 上可实现高性能且安全的对称加密。配合 HKDF 派生与规范参数治理,适合现代前端安全场景。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部