简体   繁体   English

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

[英]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. 我必须使用jssha之类的js库,因为我的代码应在多个平台等下运行。二进制文件处理是强制性要求。

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. 下面是我对Node和jsSha的解决方案。 Looks like all JS-implementations of SHA-1 work a bit different with binary data. 看起来SHA-1的所有JS实现在处理二进制数据时都有些不同。

I've found the solution for Node and jsSHA. 我已经找到了Node和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 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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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