当前位置:首页 > 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 位。

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

加密数据

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

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

完整示例

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

js实现gcm加密

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实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…

js实现图片放大

js实现图片放大

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

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…

js实现截图

js实现截图

使用HTML2Canvas库实现截图 HTML2Canvas是一个流行的JavaScript库,可以将网页元素或整个页面转换为Canvas图像。安装方式: npm install html2canv…