問題描述: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")