2

我想加密大字符串(200 MB)。字符串来自文件对应的dataUrl(base64)。

我正在浏览器中进行加密。

我的问题是,目前,我将字符串分成一小部分到一个数组中。然后我加密这个块。

目前加密字符串将填满内存。这就是我的做法。

var encryptChunk = function(chunk, index){
  encryptedChunks.push( aesEncryptor.process( chunk ));
  sendUpdateMessage( "encryption", index+1, numberOfChunks );
}
chunkedString.forEach(encryptChunk);
encryptedChunks.push( aesEncryptor.finalize() );

我认为,应该有更好的方法来做到这一点。但我找不到一种有效的记忆方式来做到这一点。

4

2 回答 2

1

你在用加密的块做什么?例如,如果您通过网络上传它们,则无需先将它们存储在数组中。相反,您可以逐块上传加密文件,既可以编写自己的分块上传实现(这并不难),也可以使用现有库。

输入同上:您可以在阅读时对其进行加密。您可以使用JS 文件 API以块的形式读取文件,使用该.slice()方法。

除此之外,您的代码看起来就像渐进式加密文件的推荐方法。

于 2013-11-16T19:41:51.360 回答
1

我正在做和你类似的事情。直接回答您的问题“有没有更有效的内存方式?” ..好吧,我使用网络工作者来处理似乎有效的渐进式密码。

  //pass in what you need here
  var worker = new Worker("path/to/worker.js");

  worker.postMessage({
                key: getKeyAndIvSomehow(),
                file: file,
                chunkSize: MY_CHUNK_SIZE
            });

  worker.addEventListener('message', function (e) {
               // create the blob from e.data.encrypted
            });

您需要将 cryptoJS 脚本导入您的工作人员:importScripts('cryptoJS.all.min.js')

于 2014-10-09T04:05:51.837 回答