HMAC在线加密核心JS实现

简介: 本文介绍基于crypto-js的HMAC在线加密工具JS实现,支持MD5、SHA-1/2/3、RIPEMD160等10种HMAC算法;密钥可选文本/Hex/Base64格式,结果输出Hex或Base64;全程浏览器端计算,安全高效。

HMAC在线加密核心JS实现

本文介绍 HMAC 在线加密工具的核心 JavaScript 实现方案,基于 crypto-js 库实现多种哈希算法的 HMAC 计算。

在线工具网址:https://see-tool.com/hmac-encryptor
工具截图:
在这里插入图片描述

算法支持

工具支持以下 HMAC 算法:

分组 算法
Common HMAC-MD5
SHA-1 HMAC-SHA1
SHA-2 HMAC-SHA224、HMAC-SHA256、HMAC-SHA384、HMAC-SHA512
SHA-3 HMAC-SHA3
Other HMAC-RIPEMD160

核心实现

算法定义

const algorithms = [
    {
    value: 'HMAC-MD5', label: 'HMAC-MD5', group: 'Common' },
    {
    value: 'HMAC-SHA1', label: 'HMAC-SHA1', group: 'SHA-1' },
    {
    value: 'HMAC-SHA224', label: 'HMAC-SHA224', group: 'SHA-2' },
    {
    value: 'HMAC-SHA256', label: 'HMAC-SHA256', group: 'SHA-2' },
    {
    value: 'HMAC-SHA384', label: 'HMAC-SHA384', group: 'SHA-2' },
    {
    value: 'HMAC-SHA512', label: 'HMAC-SHA512', group: 'SHA-2' },
    {
    value: 'HMAC-SHA3', label: 'HMAC-SHA3', group: 'SHA-3' },
    {
    value: 'HMAC-RIPEMD160', label: 'HMAC-RIPEMD160', group: 'Other' }
];

密钥格式处理

工具支持三种密钥输入格式:文本、十六进制、Base64。

let processedKey = key;

if (keyFormat === 'hex') {
   
    // 清理十六进制字符串,移除空格和 0x 前缀
    const cleanedKey = key.replace(/[\s,0x]/gi, '');
    // 校验是否为有效的十六进制字符
    if (!/^[0-9a-fA-F]*$/.test(cleanedKey)) {
   
        throw new Error('Invalid Hex key characters');
    }
    // 解析为 CryptoJS WordArray
    processedKey = window.CryptoJS.enc.Hex.parse(cleanedKey);
} else if (keyFormat === 'base64') {
   
    try {
   
        processedKey = window.CryptoJS.enc.Base64.parse(key);
    } catch (e) {
   
        throw new Error('Invalid Base64 key');
    }
}
// text 格式直接使用字符串,crypto-js 会自动处理

HMAC 计算

根据选择的算法调用对应的 CryptoJS 方法:

let hmacResult;

switch (algorithm) {
   
    case 'HMAC-MD5':
        hmacResult = window.CryptoJS.HmacMD5(message, processedKey);
        break;
    case 'HMAC-SHA1':
        hmacResult = window.CryptoJS.HmacSHA1(message, processedKey);
        break;
    case 'HMAC-SHA224':
        hmacResult = window.CryptoJS.HmacSHA224(message, processedKey);
        break;
    case 'HMAC-SHA256':
        hmacResult = window.CryptoJS.HmacSHA256(message, processedKey);
        break;
    case 'HMAC-SHA384':
        hmacResult = window.CryptoJS.HmacSHA384(message, processedKey);
        break;
    case 'HMAC-SHA512':
        hmacResult = window.CryptoJS.HmacSHA512(message, processedKey);
        break;
    case 'HMAC-SHA3':
        hmacResult = window.CryptoJS.HmacSHA3(message, processedKey);
        break;
    case 'HMAC-RIPEMD160':
        hmacResult = window.CryptoJS.HmacRIPEMD160(message, processedKey);
        break;
    default:
        hmacResult = window.CryptoJS.HmacSHA256(message, processedKey);
}

输出格式转换

计算结果支持十六进制和 Base64 两种输出格式:

if (outputFormat === 'base64') {
   
    return hmacResult.toString(window.CryptoJS.enc.Base64);
}

return hmacResult.toString(window.CryptoJS.enc.Hex);

完整函数

const calculateHmac = (message, key, algorithm, keyFormat = 'text', outputFormat = 'hex') => {
   
    if (!message) throw new Error('Message is required');

    // 处理密钥格式
    let processedKey = key;
    if (keyFormat === 'hex') {
   
        const cleanedKey = key.replace(/[\s,0x]/gi, '');
        if (!/^[0-9a-fA-F]*$/.test(cleanedKey)) {
   
            throw new Error('Invalid Hex key characters');
        }
        processedKey = window.CryptoJS.enc.Hex.parse(cleanedKey);
    } else if (keyFormat === 'base64') {
   
        try {
   
            processedKey = window.CryptoJS.enc.Base64.parse(key);
        } catch (e) {
   
            throw new Error('Invalid Base64 key');
        }
    }

    // 计算 HMAC
    let hmacResult;
    switch (algorithm) {
   
        case 'HMAC-MD5': hmacResult = window.CryptoJS.HmacMD5(message, processedKey); break;
        case 'HMAC-SHA1': hmacResult = window.CryptoJS.HmacSHA1(message, processedKey); break;
        case 'HMAC-SHA224': hmacResult = window.CryptoJS.HmacSHA224(message, processedKey); break;
        case 'HMAC-SHA256': hmacResult = window.CryptoJS.HmacSHA256(message, processedKey); break;
        case 'HMAC-SHA384': hmacResult = window.CryptoJS.HmacSHA384(message, processedKey); break;
        case 'HMAC-SHA512': hmacResult = window.CryptoJS.HmacSHA512(message, processedKey); break;
        case 'HMAC-SHA3': hmacResult = window.CryptoJS.HmacSHA3(message, processedKey); break;
        case 'HMAC-RIPEMD160': hmacResult = window.CryptoJS.HmacRIPEMD160(message, processedKey); break;
        default: hmacResult = window.CryptoJS.HmacSHA256(message, processedKey);
    }

    // 输出格式转换
    if (outputFormat === 'base64') {
   
        return hmacResult.toString(window.CryptoJS.enc.Base64);
    }
    return hmacResult.toString(window.CryptoJS.enc.Hex);
};

小结

整个实现的核心在于:

  1. 密钥格式处理:支持文本、十六进制、Base64 三种输入格式,使用 CryptoJS 的编码器进行解析
  2. 算法路由:通过 switch 语句根据算法名称调用对应的 HMAC 函数
  3. 输出转换:将计算结果转换为十六进制或 Base64 字符串输出

crypto-js 库提供了完整的 HMAC 实现,使用起来非常简洁。所有计算都在浏览器端完成,无需服务端参与,保证了安全性。

相关文章
|
23天前
|
算法 安全 JavaScript
HMAC在线加密 在线工具分享
一款基于Vue3开发的HMAC在线加密工具,支持MD5/SHA-1/SHA-256等算法,实时计算、纯前端处理,数据不上传,保障安全。提供十六进制/Base64双格式输出与一键复制功能,适用于API签名、数据校验等场景。
124 1
HMAC在线加密 在线工具分享
|
4天前
|
JavaScript 前端开发
JavaScript小技巧:数组去重的几种优雅写法
JavaScript小技巧:数组去重的几种优雅写法
318 142
|
23天前
|
弹性计算 安全 应用服务中间件
阿里云服务器如何部署安装LNMP程序环境?超简单,看完就能上手!
本文详解阿里云ECS部署LNMP环境的两种方式:一是通过系统运维管理控制台“一键安装”扩展程序,快速完成部署;二是手动安装Linux+Nginx+MySQL+PHP,支持Alibaba Cloud Linux/CentOS/Ubuntu,满足WordPress等对配置与安全的定制化需求。含完整步骤、命令及验证方法。
|
23天前
|
人工智能 自然语言处理 API
2026年OpenClaw(Clawdbot)零基础接入WhatsApp保姆级教程
在2026年AI自动化办公与跨境沟通需求双重爆发的当下,OpenClaw(原Clawdbot、曾用名Moltbot)凭借“自然语言驱动、全场景任务自动化、多终端无缝适配”的核心优势,成为个人办公提效、跨境团队协同、轻量客户服务的优选工具。作为GitHub星标量超19万的开源AI自动化代理平台,它打破了传统AI仅能对话的局限,真正实现“能听指令、能做实事”——无论是文档生成、日程提醒、文件整理,还是联网搜索、简单代码开发、跨工具协同,只需一句口语化指令,就能自动完成全流程操作,无需手动干预,完美适配现代办公与跨境沟通的高效需求。
558 19
|
22天前
|
人工智能 数据可视化 安全
2026年OpenClaw(Clawdbot)全场景实战手册:从极速部署到自定义技能开发,新手零基础通关指南
2026年,OpenClaw(原Clawdbot,曾用名Moltbot)凭借其“低代码、高扩展、全自动化”的核心特性,已成为AI智能代理领域的标杆工具。截至2026年2月,其GitHub星标量突破18.6万,Fork数超3.2万,官方技能库ClawHub收录技能超3000个。这款由奥地利开发者Peter Steinberger于2025年11月创建的开源工具,历经商标调整后正式定名“OpenClaw”,寓意“开源赋能、精准高效”。
1124 18
|
23天前
|
人工智能 自然语言处理 数据可视化
喂饭级教程:2026年OpenClaw(Clawdbot)零基础部署接入Discord
在2026年AI自动化办公与跨平台协同需求双重爆发的当下,OpenClaw(原Clawdbot、曾用名Moltbot)凭借“自然语言驱动、全场景任务自动化、多终端无缝适配”的核心优势,成为个人办公提效、轻量团队协同、在线社群管理的优选工具。作为GitHub星标量超19万的开源AI自动化代理平台,它打破了传统AI仅能对话的局限,真正实现“能听指令、能做实事”——无论是文档生成、日程提醒、文件整理,还是联网搜索、简单代码开发、跨工具协同,只需一句口语化指令,就能自动完成全流程操作,无需手动干预,完美适配现代办公与在线社群运营的高效需求,其开源特性也让用户可根据需求灵活扩展功能,适配多样化使用场景。
1079 19
|
22天前
|
人工智能 运维 数据可视化
2026年阿里云轻量服务器部署OpenClaw(Clawdbot)喂饭级教程更新!
在2026年AI自动化办公、个人数字助理普及的浪潮中,OpenClaw(原Clawdbot、曾用名Moltbot)凭借“开源免费、零门槛操控、全场景任务自动化”的核心优势,成为新手、个人用户及中小企业搭建专属AI助理的首选工具。作为GitHub星标量超19万的开源AI自动化代理平台,它彻底打破了传统AI仅能对话的局限,真正实现“能听指令、能做实事”——无论是文档生成、日程提醒、文件整理、服务器运维,还是联网搜索、简单代码开发、多工具协同,只需一句口语化指令,就能自动完成全流程操作,无需手动干预。
851 3
|
22天前
|
人工智能 自然语言处理 程序员
2026年OpenClaw/Clawdbot 极速部署教程+72个精选Skills打造全能AI助手
从只会写代码的“工具人”,到能写公众号、管邮件、做数据分析、定决策的全能AI助理,只需为OpenClaw(原Clawdbot/Moltbot)装上合适的Skills。2026年OpenClaw官方技能仓库**awesome-openclaw-skills**已收录3002个社区构建技能,覆盖内容创作、开发工具、自动化运营等全场景,遵循Anthropic开放标准,即装即用。
1117 11
|
1月前
|
安全 Java 数据挖掘
高效转换Word表格为Excel:Python方案全解析
本文介绍如何用Python自动化将Word表格转为Excel,解决手动复制易出错、耗时长等问题。基于python-docx读取表格,结合openpyxl或pandas写入,支持多表合并、数字格式识别、合并单元格处理及大文件优化,30行代码即可实现高效精准转换。(239字)
245 13
|
1月前
|
Java 应用服务中间件 Shell
Apache Tomcat 历史版本下载地址 官网地址
本指南详解Tomcat (以7.0.67为例)的完整部署流程:从官网下载历史版本、解压安装,到启动/停止服务(startup.sh/shutdown.sh),再到配置开机自启(systemctl)。涵盖目录结构说明及端口验证方法,适合Linux服务器快速部署。
339 134

热门文章

最新文章