问题描述:md5(123456)得到的结果不是正确的。
why?
问题查找:
1)安装路径问题:
yarn add md5(md5模块在npmjs中显示每周download人数高达百万,有问题还这么多人?)
2)源码查看:
md5入口源码如下:
注意第一行注释和最后一行注释,就是需要把字符串转成字节数组。
再看看不同输入,console.log打印的结果,如下:
如果传入数字123456,那么message的值是:message: 123456
如果传入字符串"123456",那么message的值是:message: (6) [49, 50, 51, 52, 53, 54]
好家伙,问题来了,传入一个数字,就无法变成字节数组了,那么后面是不是就会有问题了?
问题就出在crypt模块的bytesToWords方法,它会把我们的字节数组变成高字节序32位字,如下:
那么该函数传入数字和字符串返回的结果肯定是不一样的,按照数组取值,123456就是取值1,2,3,4,5,6来计算,“123456”则是取值49,50,51,52,53,54来计算,返回结果自然不一样了
crypt模块的bytesToWords函数返回结果如下:
数字123456的结果:crypt.bytesToWords: (2) [16909060, 84279296]
字符串123456的结果:crypt.bytesToWords: (2) [825373492, 892731392]
所以md5函数后面算法计算出来的结果肯定就不一致了。
3)解决方法:
传入字符串:md5("123456")