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

Node.js与Dart中SHA256哈希结果不一致问题求助

Node.js与Dart SHA256哈希结果不一致的原因及解决

字节数组显示差异的真相

你看到的两个字节数组其实完全相同:

  • Dart输出的[84,101,115,116]是十进制表示
  • Node.js输出的<Buffer 54 65 73 74>是十六进制表示
    将十六进制转十进制:54=84,65=101,73=115,74=116,两者内容完全匹配,只是显示格式不同。

哈希结果不同的核心原因

你的Node.js代码存在逻辑错误:crypto.createHash('sha256').digest(string_utf8)的写法不符合API规范。

  • digest()方法的作用是输出最终哈希值,不能用来传入待哈希的数据
  • 正确流程是先用update()方法传入要哈希的内容,再调用digest()输出结果
  • 当前代码相当于没有传入任何数据,直接计算了空字符串的SHA256哈希,所以得到的是空字符串的哈希值e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

修正后的Node.js代码

let crypto = require('crypto');
let string = 'Test';
let string_utf8 = Buffer.from(string, 'utf8');
let hash = crypto.createHash('sha256').update(string_utf8).digest('hex');
console.log(hash); // 输出 532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25

修正后,Node.js的哈希结果会和Dart完全一致。

内容的提问来源于stack exchange,提问作者Acher Klein

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:03:16