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

js实现gcm加密

const generateKey = async () => {
  return await window.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 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加密解密示例。

(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实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…