2

我使用forge 框架来实现某种 PGP。所以我需要加密非常大的文件(2gb 或更多)并保持加密。我想使用尽可能小的 RAM 内存。

最好的方法是什么?

4

2 回答 2

2

这是一个普遍的设计问题——与锻造没有太大关系。就像MDG所说,您需要使用流式传输来避免将整个文件和加密文件保存在内存中。

Forge 的密码对象(参见:AES)将允许您使用流中的数据块。您可以cipher.update()从流中加密任意大小的数据块,然后调用cipher.output.getBytes()以清除内部缓冲区并获取任何加密输出,然后您可以将其发送到某处。这应该使您的内存使用率保持在较低水平。

请记住,您从伪造缓冲区获得的字节将被编码为字符串。字符串编码类型是 node.js 识别为“二进制”的类型。(对于不支持 TypedArrays 的浏览器,这是一种在 JS 字符串中编码字节的方法,许多浏览器在首次编写 forge 时不支持)。Buffer如果您正在与 node.js 服务器通信,则可以使用“二进制”编码将此字符串放入 a中。如果您正在与另一台服务器通信,您可能希望在传输之前对它们进行 base64 编码。您可以使用forge.util.encode64.

您可能还想查看OpenPGP.js

于 2014-03-26T13:32:49.367 回答
0

加密大文件应该基于流以减少内存使用,您可以查看节点内置的加密模块或在 npm 上尝试不同的包(例如file-encryptor

于 2014-03-19T14:55:32.017 回答