SHA1库 - 相同二进制文件上的不同哈希

时间:2015-03-25 20:34:08

标签: javascript node.js encoding hash cryptography

当我使用文本文件调用该工具时,一切正常。但是当我通过二进制文件时,结果总是不同的。 我必须使用一些js库,比如jssha,因为我的代码应该在几个平台等下运行。二进制文件处理是强制性要求。

错误在哪里?

节点

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);

更新

Node和jsSha的解决方案是我的答案如下。看起来SHA-1的所有JS实现与二进制数据有点不同。

1 个答案:

答案 0 :(得分:0)

我找到了Node和jsSHA的解决方案。

节点

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);