首页 > 编程语言 >hmac使用场景及nodejs案例

hmac使用场景及nodejs案例

时间:2023-11-12 15:34:08浏览次数:42  
标签:场景 const key nodejs hmac 哈希 message HMAC

HMAC(Hash-based Message Authentication Code,基于哈希的消息认证码)是一种基于哈希函数的安全认证机制,用于确保数据的完整性和身份认证。它通过将密钥与消息进行哈希运算,生成一个固定长度的哈希值,用于验证数据的真实性和完整性。

原理:

  1. 使用一个密钥(Key)和一个哈希函数(如SHA-256)生成一个固定长度的哈希值。
  2. 将密钥与消息进行哈希运算,生成一个新的哈希值。
  3. 将步骤1和步骤2的哈希值进行比较,如果相同,则验证通过。

使用场景:

  1. API身份验证:在客户端和服务器之间传输数据时,可以使用HMAC来验证请求的来源和完整性。
  2. 数据签名:在分布式系统中,可以使用HMAC来确保数据在传输过程中没有被篡改。
  3. 密码存储:在存储用户密码时,可以使用HMAC将密码进行哈希处理,以保护用户的隐私。

Node.js代码案例:

const crypto = require('crypto');

// 生成HMAC
function generateHMAC(key, message) {
  const hmac = crypto.createHmac('sha256', key);
  hmac.update(message);
  return hmac.digest('hex');
}

// 验证HMAC
function verifyHMAC(key, message, hmac) {
  const generatedHMAC = generateHMAC(key, message);
  return crypto.timingSafeEqual(Buffer.from(generatedHMAC, 'hex'), Buffer.from(hmac, 'hex'));
}

// 示例
const secretKey = 'your_shared_secret_key';
const message = 'Hello, this is a message to be authenticated using HMAC.';

// 生成HMAC
const hmac = generateHMAC(secretKey, message);
console.log('Generated HMAC:', hmac);

// 验证HMAC
const isValid = verifyHMAC(secretKey, message, hmac);
console.log('Is the HMAC valid?', isValid);

在这个案例中,我们首先定义了一个共享密钥和要加密的消息。然后,我们使用SHA-256哈希函数对消息进行HMAC加密。

加密后的数据是一个固定长度的字符串,可以通过网络或其他通信方式发送给接收者。接收者使用相同的密钥和哈希函数对消息进行验证,并将加密后的数据与发送者发送的数据进行比较。如果两者相同,则说明消息没有被篡改,否则说明消息已被篡改或者不是发送者发送的。

当我们在写代码做hmac加验签时,常常可以借助一些在线的hmac加验签工具,比如:https://www.btool.cn/hmac-generator 进行比较核验我自己代码的正确性。

标签:场景,const,key,nodejs,hmac,哈希,message,HMAC
From: https://blog.51cto.com/u_16352146/8329622

相关文章

  • 虚拟机应用场景
    1、 演示环境,可以安装各种演示环境,便于做各种例子。2、保证主机的快速运行,减少不必要的垃圾安装程序,偶尔使用的程序,或者测试用的程序在虚拟机上运行。3、避免每次重新安装,银行等常用工具,不经常使用,而且要求保密比较好的,单独在一个环境下面运行。叩九九六三九四二九4、想测试一下不......
  • nodejs安装
    下载node并安装https://nodejs.org/dist/v12.14.0/node-v12.14.0-x64.msi检测是否安装成功node-v设置npm的镜像(和设置maven一个道理)1)打开cmd使用命令npmconfigsetregistryhttps://registry.npm.taobao.org2)配置后壳通过下面命令来验证是否成功npmconfigls......
  • Nodejs 第十七章(events)
    EventEmitterNode.js核心API都是采用异步事件驱动架构,简单来说就是通过有效的方法来监听事件状态的变化,并在变化的时候做出相应的动作。fs.mkdir('/tmp/a/apple',{recursive:true},(err)=>{if(err)throwerr;});process.on('xxx',()=>{})举个例子,你去一家餐厅吃......
  • 虚拟机应用场景
    1、 演示环境,可以安装各种演示环境,便于做各种例子。2、保证主机的快速运行,减少不必要的垃圾安装程序,偶尔使用的程序,或者测试用的程序在虚拟机上运行。3、避免每次重新安装,银行等常用工具,不经常使用,而且要求保密比较好的,单独在一个环境下面运行。叩九九六三九四二九4、想测试一下不......
  • 场景题:海量数据如何判重?
    在海量数据如何确定一个值是否存在?这是一道非常经典的面试场景题。那怎么回答这个问题呢?接下来咱们就详细的聊一聊。参考答案判断一个值是否存在?通常有以下两种解决方案:使用哈希表:可以将数据进行哈希操作,将数据存储在相应的桶中。查询时,根据哈希值定位到对应的桶,然后在桶内进行查找......
  • 车联网场景中的MQTT协议应用
    基本概念解释MQTT解释MQTT(MessageQueuingTelemetryTransport)是一种轻量级、基于TCP/IP协议栈构建的异步通信,和发布-订阅模式的消息传输协议。适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的高效通信......
  • 撒贝宁走进折叠宇宙:从折手机到折电视,玩转场景需求
    如果说过去几年折叠产品是少数人的玩具,那么今年,一个全民热捧的折叠宇宙正在形成。去年9月,央视名嘴撒贝宁拿着折叠手机,一屏看台本,一屏看新闻,掀起高端用户“折叠”潮流。今年,撒老师把可折叠激光电视“卷”进“新家”,从想用大屏激光电视看台本,到赏画、观影、娱乐,演绎出新时代人群对电......
  • 滚珠螺杆的精度和使用场景之间的关系?
    滚珠螺杆的精度和使用场景之间有着密切的关系,不同精度的滚珠螺杆被应用于不同的机械设备和制造工艺中,以满足不同的精度要求和生产效率。在机床加工行业中,高精度的滚珠螺杆被广泛应用于数控机床、加工中心和磨床等高精度加工设备中。这些设备需要将传动精度和稳定性达到较高的水平,以......
  • 解析Acrel-1000安科瑞变电站综合自动化系统的应用场景——安科瑞李笑曼
    功能:系统提供了完整的SCADA功能,包括主接线图、设备工况、实时数据显示、定值管理、SOE报警/记录/查询/打印、棒图、实时/历史曲线、语音报警、历史信息查询、用户权限管理、各种运行数据统计分析报表等。系统可以协助运维人员快速故障分析、定位和排除问题,对配电系统和用电设备进行......
  • MySQL导入导出数据表容量的一个问题场景
    朋友提了一个MySQL数据导出导入的问题。问题描述:从源库(兼容MySQL协议的TDSQL,selectversion()=5.7,test表字符集是utf8,test是个分区表)通过如下指令,导出一份数据,SQL格式的,文件6G,mysqldump-hx.x.x.x-P3306-uroot-proot--databasesdbtest--tablestest--complete-insert--s......