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
相关产品推荐
相关产品推荐

