当前位置:首页 > JavaScript

js实现mac

2026-02-01 18:22:05JavaScript

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

使用 Web Crypto API 实现 HMAC

Web Crypto API 是浏览器原生支持的加密接口,可用于生成 HMAC(基于哈希的消息认证码)。以下示例展示如何使用 SHA-256 算法生成 HMAC:

async function generateHMAC(message, secretKey) {
  const encoder = new TextEncoder();
  const key = await crypto.subtle.importKey(
    'raw',
    encoder.encode(secretKey),
    { name: 'HMAC', hash: 'SHA-256' },
    false,
    ['sign']
  );

  const signature = await crypto.subtle.sign(
    'HMAC',
    key,
    encoder.encode(message)
  );

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

// 使用示例
generateHMAC('hello world', 'my-secret-key')
  .then(hmac => console.log('HMAC:', hmac));

使用 Node.js 的 crypto 模块

在 Node.js 环境中,可使用内置的 crypto 模块实现 HMAC:

const crypto = require('crypto');

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

// 使用示例
const hmac = generateHMAC('hello world', 'my-secret-key');
console.log('HMAC:', hmac);

使用第三方库实现 CMAC

对于更复杂的 MAC 算法如 CMAC(基于块密码的消息认证码),可使用 node-forge 等第三方库:

js实现mac

const forge = require('node-forge');

function generateCMAC(message, key) {
  const cipher = forge.cipher.createCipher('AES-CMAC', key);
  cipher.start();
  cipher.update(forge.util.createBuffer(message));
  cipher.finish();
  return cipher.output.toHex();
}

// 使用示例
const cmac = generateCMAC('hello world', forge.random.getBytesSync(16));
console.log('CMAC:', cmac);

注意事项

  • HMAC 密钥应具有足够长度(建议至少 16 字节)
  • 避免硬编码密钥,应从安全配置中读取
  • 在浏览器环境中使用时,需确保页面通过 HTTPS 加载
  • 对于高安全需求场景,推荐使用专业的加密库如 libsodium.js

性能优化建议

  • 对于高频调用的场景,可缓存 CryptoKey 对象避免重复导入
  • 大数据可分块处理,避免内存压力
  • Web Worker 中执行耗时加密操作,避免阻塞主线程

标签: jsmac
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…