当前位置:首页 > 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
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promise…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…