HMAC(Hash-based Message Authentication Code,基于哈希的消息认证码)是一种基于哈希函数的安全认证机制,用于确保数据的完整性和身份认证。它通过将密钥与消息进行哈希运算,生成一个固定长度的哈希值,用于验证数据的真实性和完整性。
原理:
- 使用一个密钥(Key)和一个哈希函数(如SHA-256)生成一个固定长度的哈希值。
- 将密钥与消息进行哈希运算,生成一个新的哈希值。
- 将步骤1和步骤2的哈希值进行比较,如果相同,则验证通过。
使用场景:
- API身份验证:在客户端和服务器之间传输数据时,可以使用HMAC来验证请求的来源和完整性。
- 数据签名:在分布式系统中,可以使用HMAC来确保数据在传输过程中没有被篡改。
- 密码存储:在存储用户密码时,可以使用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