Node.js使用crypto模块计算MD5哈希结果与在线工具不一致问题
解决Node.js crypto计算MD5与在线工具结果不一致的问题
嘿,我一眼就看出问题出在字符串转换的写法上啦!
你代码里的toString(num)是错误的用法——这并不是把数字转换成字符串的正确方式,这会导致update方法接收到的内容根本不是你预期的"1092000",自然MD5哈希结果就和在线工具对不上了。
正确的代码实现
const crypto = require('crypto'); const num = 1092000; // 调用数字自身的toString()方法,得到正确的字符串"1092000" const hash = crypto.createHash('md5').update(num.toString()).digest('hex'); // 在线工具返回的是大写哈希值,所以可以转成大写完全匹配 console.log(hash.toUpperCase()); // 输出 AF118C8D2A0D27A1D49582FDF6339B7C
为什么会出错?
在线工具是把你输入的数字当作**字符串"1092000"**来计算MD5的,而你原来的toString(num)写法(如果全局环境中没有自定义的toString函数的话)甚至可能抛出错误,或者得到完全不符合预期的字符串内容。只有调用数字对象的toString()方法,才能得到我们需要的"1092000"字符串,这样计算出的MD5哈希才会和在线工具一致。
你也可以直接把字符串字面量传给update来验证:
crypto.createHash('md5').update("1092000").digest('hex').toUpperCase()
执行这行代码,结果就是在线工具返回的AF118C8D2A0D27A1D49582FDF6339B7C。
内容的提问来源于stack exchange,提问作者SecretIndividual
相关产品推荐
相关产品推荐

