You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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");
}

修改说明

  1. 替换原有的错误密钥处理逻辑,直接用base64.decode(credentials)实现Node.js中Base64解码密钥的操作
  2. 其余HMAC计算、字符串编码逻辑保持不变,确保和Node.js的处理完全对齐

内容的提问来源于stack exchange,提问作者Meet Parsaniya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:40:55