当前位置:首页 > JavaScript

js实现gcm加密

2026-04-07 15:48:34JavaScript

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
  );
}

解密数据

使用相同的密钥和初始化向量解密数据:

js实现gcm加密

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

标签: jsgcm
分享给朋友:

相关文章

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…

js实现复制功能实现

js实现复制功能实现

使用document.execCommand方法(传统方式,已逐渐被弃用) 传统方式通过document.execCommand('copy')实现复制功能,需先选中文本。以下是一个完整示例: fu…