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 不一致的问题,记得先查查是不是编码没对齐。
24.08KB
文件大小:
评论区