HMAC(Hash-based Message Authentication Code)是一种带密钥的消息认证码,定义在 RFC 2104。下面重点说明选项说明。
HMAC有哪些参数
哈希算法、输出格式、密钥与消息的字符集。
示例
输入:密钥 "key",消息 I ♥ Unicode
计算结果:c869721d6dd65a0a9360ec7be57e2fd1094aa50c3bcf06b8dacff234b8a7f9b9
说明:HMAC-SHA256,密钥与消息均按 UTF-8 字节计算。
规则说明
- 密钥要足够长、随机,并保密,不能写进前端公开代码
- 比较 HMAC 必须用常量时间比较,防止时序攻击
- 约定字符集(建议 UTF-8)和输出格式(十六进制或 Base64)
- 不要把密钥和消息拼在一起直接哈希来“代替”HMAC,那不是 HMAC
Java 示例
下面是 Java 中处理HMAC的常用写法:
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec("key".getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
mac.doFinal("abc".getBytes(StandardCharsets.UTF_8));运行前确认输入的字符集(推荐 UTF-8),结果可以用本站工具交叉核对。
本站的HMAC计算工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
常见问题
【HMAC 能当加密用吗?】不能。它只生成认证码,不隐藏原文。
【和直接 hash(key+message) 有什么不同?】直接拼接有长度扩展等隐患;HMAC 按 RFC 2104 构造,是标准做法。
【密钥多长合适?】至少与哈希输出相当,例如 HMAC-SHA256 建议 32 字节随机密钥。
文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。
标签: 数码开发
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。