Node.js 颤振:更新Hmac加密包

Node.js 颤振:更新Hmac加密包,node.js,flutter,dart,cryptography,Node.js,Flutter,Dart,Cryptography,我试图用dart中的加密包重现一个场景。nodejs中的场景与nodejs cryto包类似- nodejs const crypto = require('crypto') var timeStamp = Math.floor(Date.now()); key = ""; secret = "" body = { "timestamp": timeStamp } const payload = new Buffer(J

我试图用dart中的加密包重现一个场景。nodejs中的场景与nodejs cryto包类似-

nodejs

const crypto = require('crypto')

var timeStamp = Math.floor(Date.now());

key = "";
secret = ""

body = {
    "timestamp": timeStamp
}

const payload = new Buffer(JSON.stringify(body)).toString();

const signature = crypto.createHmac('sha256', secret).update(payload).digest('hex')
我无法在dart中找到update方法(nodejs示例最后一行)的实现。 到目前为止,我只能使用一个数据集获取HMAC对象

我的省道代码

int timeStamp = DateTime.now().microsecondsSinceEpoch;

    Map<String, dynamic> body = {
      "timestamp": timeStamp,
    };

    String payload = jsonEncode(body);

    var key = utf8.encode(secret);
    var bytes = utf8.encode(payload);

    Hmac hmacShaFirst = Hmac(sha256, key);
    var signature = hmacShaFirst.convert(bytes);

    print("HMAC digest as bytes: ${signature.bytes}");
    print("HMAC digest as hex string: $signature"); 
int timeStamp=DateTime.now().microsecondssincepoch;
地图正文={
“时间戳”:时间戳,
};
字符串有效载荷=jsonEncode(正文);
var key=utf8.encode(秘密);
var bytes=utf8.encode(有效载荷);
Hmac hmacShaFirst=Hmac(sha256,键);
var signature=hmacShaFirst.convert(字节);
打印(“作为字节的HMAC摘要:${signature.bytes}”);
打印(“十六进制字符串形式的HMAC摘要:$signature”);

谢谢

不可复制。对于
时间戳
秘密
的相同内容,两个代码给出相同的结果。请贴一个具体的例子。两个注意事项:在NodeJS端,
Math.floor()
实际上应该是多余的,因为返回的是以毫秒为单位的数字,这是一个整数。在Dart方面,
时间戳
当前以微秒为单位,因此需要更改为。谢谢,nodejs不是我关心的问题,我只是从这个API的文档中添加了它,以便回答者能够了解我正在尝试做的事情。其次,微秒是一种类型,谢谢你的修正。我将试着总结一下这个问题——nodejs代码首先创建一个带有键的HMAC,然后使用UPDATE方法创建另一个使用json数据的HMAC(我想)。在dart方面,我只能创建一个HMAC,在dart方面找不到更新方法的对应项。在NodeJS代码中,使用
crypto.createHmac()
创建HMAC对象。数据通过
hmac.update()
传递,hmac值通过
hmac.digest()
返回。在Dart代码中,
Hmac()
也会创建Hmac对象。使用
Hmac.convert()
传递数据并返回Hmac值,即
convert()
结合了
update()
digest()的功能。然而,NodeJS构造的优点是可以多次调用
update()
。这两个代码在我的机器上给出相同的结果。如果这与您的情况不同,您应该发布示例数据。谢谢您的帮助,您是对的。我错误地认为update()函数必须有一个对应项,而convert()完成所有工作。如果您觉得有必要,可以添加一个答案作为答案。