js实现gcm加密
GCM 加密的 JavaScript 实现
GCM(Galois/Counter Mode)是一种提供加密和认证的块密码模式。在 JavaScript 中,可以使用 Web Crypto API 来实现 GCM 加密。
生成密钥
使用 Web Crypto API 生成 AES-GCM 密钥:
async function generateKey() {
return await window.crypto.subtle.generateKey(
{
name: "AES-GCM",
length: 256, // 可以是 128, 192 或 256
},
true, // 是否可导出
["encrypt", "decrypt"]
);
}
加密数据
使用生成的密钥加密数据:
async function encryptData(key, data, iv) {
return await window.crypto.subtle.encrypt(
{
name: "AES-GCM",
iv: iv, // 初始化向量
tagLength: 128, // 认证标签长度
},
key,
data
);
}
解密数据
使用相同的密钥和初始化向量解密数据:

async function decryptData(key, encryptedData, iv) {
return await window.crypto.subtle.decrypt(
{
name: "AES-GCM",
iv: iv,
tagLength: 128,
},
key,
encryptedData
);
}
完整示例
async function runExample() {
// 生成密钥
const key = await generateKey();
// 准备数据和初始化向量
const data = new TextEncoder().encode("Hello, GCM!");
const iv = window.crypto.getRandomValues(new Uint8Array(12)); // 推荐 12 字节
// 加密
const encrypted = await encryptData(key, data, iv);
// 解密
const decrypted = await decryptData(key, encrypted, iv);
const decryptedText = new TextDecoder().decode(decrypted);
console.log("Decrypted:", decryptedText);
}
runExample();
注意事项
- 初始化向量 (IV) 应该是唯一的,对于相同的密钥不要重复使用
- 推荐的 IV 长度是 12 字节
- GCM 模式提供了数据完整性和认证,不需要额外的 MAC
- 在实际应用中,需要妥善管理密钥和 IV






