JavaScript中的Web Cryptography API与数据加密
字数 594 2025-11-25 04:31:29

JavaScript中的Web Cryptography API与数据加密

描述
Web Cryptography API为浏览器提供了标准的密码学操作接口,支持哈希生成、数字签名、加密解密等安全功能。它通过window.crypto.subtle提供,所有操作均异步执行且返回Promise,专为保护Web应用中的敏感数据而设计。

知识讲解

  1. API基础结构

    • 通过crypto.subtle访问,仅限HTTPS环境或localhost使用
    • 支持算法包括:AES(加密)、RSA(非对称加密)、SHA(哈希)、HMAC(消息认证)
    • 密钥分为对称密钥(单密钥)和非对称密钥(公钥/私钥对)
  2. 核心操作流程

    • 生成密钥:使用generateKey()生成CryptoKey对象
    • 加密/解密:对称加密用AES,非对称加密用RSA-OAEP
    • 哈希计算:通过SHA系列算法生成数据指纹
    • 签名/验证:用私钥签名,公钥验证完整性

实战演示:AES-GCM加密

  1. 生成密钥
const key = await crypto.subtle.generateKey(
  {
    name: "AES-GCM",
    length: 256, // 密钥长度
  },
  true, // 是否可导出
  ["encrypt", "decrypt"] // 密钥用途
);
  1. 加密数据
const encoder = new TextEncoder();
const data = encoder.encode("秘密消息");
const iv = crypto.getRandomValues(new Uint8Array(12)); // 初始化向量

const encrypted = await crypto.subtle.encrypt(
  {
    name: "AES-GCM",
    iv: iv,
  },
  key,
  data
);
  1. 解密数据
const decrypted = await crypto.subtle.decrypt(
  {
    name: "AES-GCM",
    iv: iv, // 必须使用加密时的IV
  },
  key,
  encrypted
);

const decoder = new TextDecoder();
console.log(decoder.decode(decrypted)); // "秘密消息"

关键要点

  • IV重要性:每次加密需唯一IV,防止重复攻击
  • 密钥管理:敏感密钥应存储在安全后端
  • 错误处理:解密失败会抛出异常,需try-catch包装
  • 性能考量:大数据建议分块处理,避免阻塞主线程

应用场景

  • 端到端加密聊天应用
  • 客户端密码哈希处理
  • JWT令牌的签名验证
  • 本地敏感数据加密存储
JavaScript中的Web Cryptography API与数据加密 描述 Web Cryptography API为浏览器提供了标准的密码学操作接口,支持哈希生成、数字签名、加密解密等安全功能。它通过 window.crypto.subtle 提供,所有操作均异步执行且返回Promise,专为保护Web应用中的敏感数据而设计。 知识讲解 API基础结构 通过 crypto.subtle 访问,仅限HTTPS环境或localhost使用 支持算法包括:AES(加密)、RSA(非对称加密)、SHA(哈希)、HMAC(消息认证) 密钥分为对称密钥(单密钥)和非对称密钥(公钥/私钥对) 核心操作流程 生成密钥 :使用 generateKey() 生成CryptoKey对象 加密/解密 :对称加密用AES,非对称加密用RSA-OAEP 哈希计算 :通过SHA系列算法生成数据指纹 签名/验证 :用私钥签名,公钥验证完整性 实战演示:AES-GCM加密 生成密钥 加密数据 解密数据 关键要点 IV重要性 :每次加密需唯一IV,防止重复攻击 密钥管理 :敏感密钥应存储在安全后端 错误处理 :解密失败会抛出异常,需try-catch包装 性能考量 :大数据建议分块处理,避免阻塞主线程 应用场景 端到端加密聊天应用 客户端密码哈希处理 JWT令牌的签名验证 本地敏感数据加密存储