Javascript CryptoJS SHA256大文件渐进校验和
我正在尝试使用CryptoJS获取大文件(大于500MB)的校验和,这样浏览器就不会崩溃。我已经在使用一个具有分块功能的Web Worker。因此,当我迭代块来更新CryptoJS以开始创建校验和时,我尝试逐步使用每个块。然而,当我最终确定时,它仍然在最后返回错误的校验和。它似乎只返回最后一个块的校验和,而不是所有块的校验和。你能告诉我我做错了什么吗 此外,我不必使用CryptoJS,因为我发现它速度很慢,但它似乎是唯一一个可以处理渐进加密的库Javascript CryptoJS SHA256大文件渐进校验和,javascript,hash,sha256,cryptojs,chunking,Javascript,Hash,Sha256,Cryptojs,Chunking,我正在尝试使用CryptoJS获取大文件(大于500MB)的校验和,这样浏览器就不会崩溃。我已经在使用一个具有分块功能的Web Worker。因此,当我迭代块来更新CryptoJS以开始创建校验和时,我尝试逐步使用每个块。然而,当我最终确定时,它仍然在最后返回错误的校验和。它似乎只返回最后一个块的校验和,而不是所有块的校验和。你能告诉我我做错了什么吗 此外,我不必使用CryptoJS,因为我发现它速度很慢,但它似乎是唯一一个可以处理渐进加密的库 var sha256 = CryptoJS.al
var sha256 = CryptoJS.algo.SHA256.create(),
sha256Update,
checksum = [],
chunker = function(workerData) {
var file = workerData.fileBlob,
totalFileSize = file.size,
chunkLength = 3145728,
start = 0,
stop = chunkLength,
i = 0, readSlicer,
fileSlicer,
chunk,
chunkUint8,
timerCounter = 0,
hashConvert;
var checker = function() {
start = stop;
stop += chunkLength;
if(start >= totalFileSize) {
console.log("Done reading file!", stop, totalFileSize);
sha256Update.finalize();
console.log("CheckSum : ", sha256Update._hash.toString(CryptoJS.enc.Hex));
return;
}
readBlock(start, chunkLength, file);
};
var readBlock = function(start, chunkLength, file) {
readSlicer = new FileReaderSync();
fileSlicer = file.slice(start, stop + 1);
chunk = readSlicer.readAsArrayBuffer(fileSlicer);
chunkUint8 = new Uint8Array(chunk);
var wordArr = CryptoJS.lib.WordArray.create(chunkUint8);
sha256Update = sha256.update(wordArr);
checksum.push(sha256Update);
checker();
};
readBlock(start, chunkLength, file);
};
我已经清理了上面的代码一点;有人可能会发现它很有用(这是经过测试的,工作正常):
从“crypto js”导入CryptoJS;
类校验服务{
异步sha256(文件:file):承诺{
设sha256=CryptoJS.algo.sha256.create();
常量切片大小=10_485_760;//10 MiB
让start=0;
while(开始{
const fileReader=new fileReader();
const slice=file.slice(开始,开始+大小);
fileReader.onload=()=>resolve(新的Uint8Array(fileReader.result as any));
fileReader.onerror=拒绝;
readAsArrayBuffer(切片);
});
}
}
你能提供一把小提琴吗?我没有试过,但可能是因为fileSlicer=file.slice(start,stop+1)行中的+1
代码>。移除它。@ArtjomB。难道你不讨厌有什么东西盯着你的脸,而你却看不见吗?就这样!谢谢是的,我讨厌这个。我只是注意到了这一点,因为我为一个SO问题写了类似的东西。您的代码是否使用了上面建议的删除“+1”的修复程序?您是否能够优化或减少代码并使其符合typescript?