简体   繁体   中英

SHA1 libraries - different hash on same binary file

All is ok, when I call the tool with the text file. But results always are different, when I pass the binary one. I have to use some js library, like jssha, because my code should be run under several platforms and etc. Binary files processing is the mandatory requirement.

Where is the mistake ?

Node

var crypto = require('crypto')
  , shasum = crypto.createHash('sha1');
var fs = require('fs');
var args = process.argv.slice(2);


console.time('readFile');
var data = fs.readFileSync(args[0],'utf8').toString();
console.timeEnd('readFile');

console.time('sha1');
shasum.update(data);
var hash = shasum.digest('base64');
console.timeEnd('sha1');

console.log(hash);

jssha

var jsSHA = require('jssha')
var fs = require('fs');
var args = process.argv.slice(2);

console.time('readFile');
var data = fs.readFileSync(args[0],'utf8').toString();
console.timeEnd('readFile');

console.time('sha1');
var shaObj = new jsSHA(data, "TEXT");
var hash = shaObj.getHash("SHA-1", "B64");
console.timeEnd('sha1');

console.log(hash);

Update

The solution for Node and jsSha is my answer below. Looks like all JS-implementations of SHA-1 work a bit different with binary data.

I've found the solution for Node and jsSHA.

Node

var crypto = require('crypto')
  , shasum = crypto.createHash('sha1');
var fs = require('fs');
var args = process.argv.slice(2);


console.time('readFile');
var data = fs.readFileSync(args[0]);
console.timeEnd('readFile');

console.time('sha1');
shasum.update(data);
var hash = shasum.digest('base64');
console.timeEnd('sha1');

console.log(hash);

jsSHA

var jsSHA = require('jssha')
var fs = require('fs');
var args = process.argv.slice(2);

console.time('readFile');
var data = fs.readFileSync(args[0]).toString('hex');
console.timeEnd('readFile');

console.time('sha1');
var shaObj = new jsSHA(data, "HEX");
var hash = shaObj.getHash("SHA-1", "B64");
console.timeEnd('sha1');

console.log(hash);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM