当前位置:首页 > JavaScript

js实现gcm加密

2026-03-15 22:24:32JavaScript

GCM加密简介

GCM(Galois/Counter Mode)是一种结合了计数器模式(CTR)和Galois消息认证码(GMAC)的加密模式,提供机密性和完整性保护。在JavaScript中,可以通过Web Crypto API实现GCM加密。

生成密钥

使用crypto.subtle.generateKey方法生成AES-GCM密钥。密钥长度可以是128、192或256位。

const generateKey = async () => {
  return await window.crypto.subtle.generateKey(
    {
      name: "AES-GCM",
      length: 256,
    },
    true,
    ["encrypt", "decrypt"]
  );
};

加密数据

使用crypto.subtle.encrypt方法进行加密。需要提供初始化向量(IV)和可选的附加认证数据(AAD)。

const encryptData = async (key, data, iv) => {
  return await window.crypto.subtle.encrypt(
    {
      name: "AES-GCM",
      iv: iv,
      additionalData: new TextEncoder().encode("Optional AAD"),
      tagLength: 128,
    },
    key,
    new TextEncoder().encode(data)
  );
};

解密数据

使用crypto.subtle.decrypt方法进行解密。需要提供相同的IV和AAD。

const decryptData = async (key, encryptedData, iv) => {
  return await window.crypto.subtle.decrypt(
    {
      name: "AES-GCM",
      iv: iv,
      additionalData: new TextEncoder().encode("Optional AAD"),
      tagLength: 128,
    },
    key,
    encryptedData
  );
};

完整示例

以下是一个完整的GCM加密解密示例。

js实现gcm加密

(async () => {
  const key = await generateKey();
  const iv = window.crypto.getRandomValues(new Uint8Array(12));
  const data = "Secret message";

  const encrypted = await encryptData(key, data, iv);
  console.log("Encrypted:", new Uint8Array(encrypted));

  const decrypted = await decryptData(key, encrypted, iv);
  console.log("Decrypted:", new TextDecoder().decode(decrypted));
})();

注意事项

  • IV必须是唯一的,每次加密都应使用不同的IV。IV不需要保密,但不应重复使用。
  • AAD是可选的,用于提供额外的完整性保护,但不参与加密过程。
  • GCM模式通常比CBC模式更高效且更安全,适合高性能要求的场景。

通过Web Crypto API实现的GCM加密在现代浏览器中广泛支持,适用于需要高安全性的Web应用。

标签: jsgcm
分享给朋友:

相关文章

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…

js实现删除

js实现删除

使用 splice 方法删除数组元素 splice 方法可以删除数组中的元素,并返回被删除的元素。它接受两个参数:起始索引和要删除的元素数量。 const array = [1, 2, 3, 4…

js 实现按钮点击

js 实现按钮点击

实现按钮点击的 JavaScript 方法 HTML 按钮元素 在 HTML 中创建一个按钮,可以通过 <button> 或 <input> 标签实现: <button…

js实现保存图片

js实现保存图片

使用Canvas绘制并保存图片 在HTML中创建一个Canvas元素,通过JavaScript绘制内容后转换为图片并保存。Canvas的toDataURL方法可将画布内容转为Base64编码的图片数据…