JavaScript-MD5 icon indicating copy to clipboard operation
JavaScript-MD5 copied to clipboard

Binary data hash error

Open qilx opened this issue 5 years ago • 3 comments

I am trying to migrate from node-forge to blueimp-mp5 + web crypto api. I created test script:

` var hex = 'B955EF8C83544AD74F803321866F005A';

var bytesStr = forge.util.hexToBytes(hex);

var data = bytesStr;
var h1 = forge.md.md5.create().start().update(data).digest().getBytes();
var h2 = md5(data, null, true);

console.log("H1: ", h1);
console.log("H2: ", h2);`

If 'data' is normal string, everything seems to work fine. But if 'data' is binary (like in example), hashes are different. Am I doing something wrong or is it bug please?

qilx avatar Sep 03 '20 21:09 qilx

The input to the md5 function is always expected to be a string: https://github.com/blueimp/JavaScript-MD5/blob/master/README.md#api

This project was developed as a cross-browser MD5 library that also works in NodeJS and was built before ArrayBuffer was widely available.

If you need support for non-string inputs, you probably want to use a different implementation.

blueimp avatar Sep 06 '20 05:09 blueimp

Here is example rewritten to use 'atob' to get input data. This function returns string.

    var data = atob('uVXvjINUStdPgDMhhm8AWg==');
    console.log("Data: ", data);
    var h1 = forge.md.md5.create().start().update(data).digest().toHex();
    var h2 = md5(data);

    console.log("H1: ", h1);
    console.log("H2: ", h2);

    var b1 = forge.md.md5.create().start().update(data).digest().getBytes();
    var b2 = md5(data, null, true);

    console.log("B1: ", b1);
    console.log("B2: ", b2);

qilx avatar Sep 11 '20 18:09 qilx

You could use something like,

function btou(data) {
	var s = "";
	for (var i = 0; i < data.length; i++) {
		s += String.fromCharCode(data[i]);
	}
	return s;
}

Pass a Uint8Array to btou, and it will return a UTF-8 string.

BinBashBanana avatar Apr 24 '21 18:04 BinBashBanana