文件的不同 sha256 哈希值与作为词数组的文件内容



我做了一个测试文本文件,内容是: aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffffgggggggghhhhhhhh

此值作为字符串的 sha256 十六进制摘要为: 75eef9680de51f6f70291057e9afc5975470960dfec5f37f83db69aa625786e5

当使用 hashlib、使用 Crypto.js 的 js 或从命令行对文件使用 ssl 在 python 中进行哈希处理时,我得到了相同的值。

但是,在 js 中,当我像这样读取文件时:

var fr = new FileReader();
fr.readAsArrayBuffer(file);
console.log(fr.result.byteLength); // it's 64...
var input = CryptoJS.lib.WordArray.create(new Uint8Array(fr.result));
CryptoJS.SHA256(input).toString();

我得到: 8f76bf13468fb12ac4e59610adff70fd10282e8494a2749db4677f81e2c6e998

更新:从加密.js文档中:

/**
 * cryptojs use WordArray (CryptoJS.lib.WordArray) as parameter/result frequently.
 *    A WordArray object represents an array of 32-bit words. When you pass a string,
 * it's automatically converted to a WordArray encoded as UTF-8.
 */

怀疑它可能是 UTF-8 与 ASCII 的东西,或者类似的东西,但不知道如何检查。

我找到了asmCrypto.js它接受ArrayBuffers和Uint8Arrays作为输入 - 我现在得到了预期的结果(它也很快)。 我是这样使用它的:

var fr = new FileReader();
fr.readAsArrayBuffer(file);
console.log(fr.result.byteLength); // it's still 64...
asmCrypto.SHA256.hex(new Uint8Array(fr.result));
asmCrypto.SHA256.hex(fr.result); // this also works

最新更新