我尝试使用以下代码加密1 GB的文件。但Node.js中止与“致命错误:JS分配失败-进程内存不足”。我该如何处理?
var fs = require('fs');
var crypto = require('crypto');
var key = "14189dc35ae35e75ff31d7502e245cd9bc7803838fbfd5c773cdcd79b8a28bbd";
var cipher = crypto.createCipher('aes-256-cbc', key);
var file_cipher = "";
var f = fs.ReadStream("test.txt");
f.on('data', function(d) {
file_cipher = file_cipher + cipher.update(d, 'utf8', 'hex');
});
f.on('end', function() {
file_cipher = file_cipher + cipher.final('hex');
});
3条答案
按热度按时间xzv2uavs1#
您可以将加密的文件写回磁盘,而不是将整个文件缓冲在内存中:
u3r8eeie2#
不推荐使用没有初始化向量的crypto.createCipher(),因为
NodeJS v10.0.0
使用crypto.createCipheriv()。您还可以使用stream.pipeline()而不是
pipe
方法来管道流,然后promisify它(因此代码将很容易适应promise-like和async/await流)。使用NodeJS 15+可以简化它(跳过
promisify
部分)lskq00tm3#
我会简单地使用Fileger来实现,它是一个基于promise的包,是NodeJS文件系统的一个干净的替代品。