当前位置:首页 > JavaScript

js实现mac

2026-04-06 11:19:19JavaScript

实现 MAC(消息认证码)的 JavaScript 方法

在 JavaScript 中实现 MAC(Message Authentication Code)通常需要使用加密库或原生 API。以下是两种常见的方法:

使用 Web Crypto API(浏览器环境)

Web Crypto API 是现代浏览器提供的原生加密接口,支持 HMAC(Hash-based MAC)算法:

js实现mac

async function generateHMAC(message, secretKey) {
  const encoder = new TextEncoder();
  const messageBuffer = encoder.encode(message);
  const keyBuffer = encoder.encode(secretKey);

  const cryptoKey = await window.crypto.subtle.importKey(
    'raw',
    keyBuffer,
    { name: 'HMAC', hash: 'SHA-256' },
    false,
    ['sign']
  );

  const signature = await window.crypto.subtle.sign(
    'HMAC',
    cryptoKey,
    messageBuffer
  );

  return Array.from(new Uint8Array(signature))
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');
}

使用 Node.js 的 crypto 模块

在 Node.js 环境中可以使用内置的 crypto 模块:

js实现mac

const crypto = require('crypto');

function generateHMAC(message, secretKey) {
  return crypto
    .createHmac('sha256', secretKey)
    .update(message)
    .digest('hex');
}

注意事项

  • 密钥长度应足够长(推荐至少 32 字节)
  • 选择适当的哈希算法(如 SHA-256)
  • 浏览器环境中 Web Crypto API 仅支持 HTTPS 或 localhost
  • 存储密钥时应确保安全性

验证 MAC 的方法

验证 MAC 时只需重新计算 MAC 并与接收到的 MAC 比较:

async function verifyHMAC(message, receivedMAC, secretKey) {
  const calculatedMAC = await generateHMAC(message, secretKey);
  return calculatedMAC === receivedMAC;
}

其他 MAC 算法

除了 HMAC,还可以实现:

  • CMAC(基于分组密码)
  • Poly1305(通常与 ChaCha20 配合使用)

但这些算法在 JavaScript 中通常需要第三方库支持。

标签: jsmac
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…