Node.js中文MD5加密与PHP结果不一致的解决方法

Node.js 的md5加密中文和 PHP 对不上?这个坑我踩过,分享下办法。

PHP 里你直接md5('程序员'),返回的就是正确值。但 Node.js 这边用crypto.createHash('md5').update(str),中文字符串就出问题,主要是编码搞错了。

Node 默认是按utf8的,PHP 那边其实也是。但 Node 里update()方法如果你不指定编码,它有时会用系统默认编码(尤其老版本)。也简单,加个编码参数:update(str, 'utf8'),结果就能对上了。

举个完整的例子:

const crypto = require('crypto');
function md5(str) {
  return crypto.createHash('md5').update(str, 'utf8').digest('hex');
}
console.log(md5('程序员'));

这下输出就是72d9adf4944f23e5efde37f6364c126f,和 PHP 一致。嗯,搞接口联调的朋友,一定别忽略这个小细节。

另外,想扩展下的话,我整理了一些其他语言和场景的md5资源,你可以按需看看:

如果你也在搞 PHP 和 Node.js 互通的接口,遇到 md5 不一致的问题,记得先查查是不是编码没对齐。

pdf 文件大小:24.08KB