Javascript 不同数组的 md5 散列产生相同的值

Javascript md5 hash of different arrays yields same value

使用 md5 npm 模块,我试图理解为什么 运行 以下具有两个不同输入值的命令会产生相同的散列值。

const value1 = ["test1"];
const value2 = ["test2"];

const result1 = md5(value1);
const result2 = md5(value2);

// but

const result3 = md5(JSON.stringify(value1));
const result4 = md5(JSON.stringify(value2));

// result1 === result2
// result3 !== result4

查看源码:

  md5 = function (message, options) {
    // Convert to byte array
    if (message.constructor == String)
      if (options && options.encoding === 'binary')
        message = bin.stringToBytes(message);
      else
        message = utf8.stringToBytes(message);
    else if (isBuffer(message))
      message = Array.prototype.slice.call(message, 0);
    else if (!Array.isArray(message) && message.constructor !== Uint8Array)
      message = message.toString();
    // else, assume byte array already

如果您向它传递一个消息数组(在前两种情况下就是这样),那么它会假定您向它传递一个字节数组。

您向它传递了一个字符串数组,因此它中断了。