Я пытаюсь использовать CryptoJS для получения контрольной суммы больших файлов (больше 500 МБ), чтобы браузер не зависал. Я уже использую Web Worker с фрагментацией. Итак, я пытаюсь постепенно использовать каждый фрагмент, когда я перебираю фрагменты, чтобы обновить CryptoJS, чтобы начать создание контрольной суммы. Тем не менее, он все еще возвращает неправильную контрольную сумму в конце, когда я завершаю. Кажется, что он возвращает только контрольную сумму последнего фрагмента, а не контрольную сумму всех фрагментов. Можете ли вы сообщить мне, что я делаю неправильно.
Кроме того, мне не нужно использовать CryptoJS, так как я считаю его медленным, но, похоже, это единственная библиотека, которая может обрабатывать прогрессивное шифрование.
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);
};
+1
в строкеfileSlicer = file.slice(start, stop + 1);
. Убери это. - person Artjom B.   schedule 19.04.2015