当前位置:首页 > JavaScript

js实现gcm加密

2026-02-02 22:01:05JavaScript

GCM 加密简介

GCM(Galois/Counter Mode)是一种提供加密和认证的加密模式,常用于需要高性能和安全性的场景。JavaScript 中可以通过 Web Crypto API 实现 GCM 加密。

生成密钥

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

js实现gcm加密

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

加密数据

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

js实现gcm加密

const encryptData = async (key, data, iv) => {
  return await 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 crypto.subtle.decrypt(
    {
      name: "AES-GCM",
      iv: iv,
      additionalData: new TextEncoder().encode("optional-aad"),
      tagLength: 128,
    },
    key,
    encryptedData
  );
};

完整示例

以下是一个完整的示例,展示如何生成密钥、加密和解密数据。

const runExample = async () => {
  const key = await generateKey();
  const iv = crypto.getRandomValues(new Uint8Array(12));
  const data = "Hello, GCM!";

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

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

runExample();

注意事项

  • IV 必须是唯一的,每次加密都应使用不同的 IV。IV 不需要保密,可以随密文一起传输。
  • AAD 是可选的,用于提供额外的认证数据,但不加密。
  • GCM 模式要求 IV 长度为 12 字节,否则可能影响安全性。

标签: jsgcm
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url,…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…