当前位置:首页 > 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轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…

js实现 拖动

js实现 拖动

实现拖动的步骤 HTML 结构 创建一个可拖动的元素和一个放置区域: <div id="draggable" draggable="true">拖动我</div> <d…

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…