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
如果您向它传递一个消息数组(在前两种情况下就是这样),那么它会假定您向它传递一个字节数组。
您向它传递了一个字符串数组,因此它中断了。
使用 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
如果您向它传递一个消息数组(在前两种情况下就是这样),那么它会假定您向它传递一个字节数组。
您向它传递了一个字符串数组,因此它中断了。