Flutter(Dart)与Node.js的HMAC-SHA1签名结果不一致,求修正
修复Dart与Node.js HMAC-SHA1签名不一致问题
问题根源
两段代码的核心差异在于密钥的处理逻辑:
- Node.js:将输入的密钥字符串当作Base64格式,解码为原始字节数组作为HMAC密钥
- 原Dart代码:错误地对密钥字符串执行了UTF8编码→Base64编码的操作,再将编码结果转成UTF8字节,逻辑完全反向
修改后的Dart代码
import 'dart:convert'; import 'package:crypto/crypto.dart'; void main() { String credentials = "031f0b737d155ed67bb9a3a174e10f6e"; String stringForTokenGeneration = "/627b533efd2da43909008561/63bfe56832156f9174527aa6?expires=1674823949447"; // 关键修改:将credentials当作Base64字符串解码,对应Node.js的Buffer.from(proxySecret, 'base64') var key = base64.decode(credentials); var bytes = utf8.encode(stringForTokenGeneration); var hmacSha1 = Hmac(sha1, key); var digest = hmacSha1.convert(bytes); print("HMAC digest as bytes: ${digest.bytes}"); print("HMAC digest as hex string: $digest"); }
修改说明
- 替换原有的错误密钥处理逻辑,直接用
base64.decode(credentials)实现Node.js中Base64解码密钥的操作 - 其余HMAC计算、字符串编码逻辑保持不变,确保和Node.js的处理完全对齐
内容的提问来源于stack exchange,提问作者Meet Parsaniya
相关产品推荐
相关产品推荐

