我使用forge framework来实现某种PGP。所以我需要加密非常大的文件(2GB或更多)并保持加密。我想尽可能使用较小的RAM内存。
最好的方法是什么?
答案 0 :(得分:2)
这是一个一般性的设计问题 - 与锻造无关。与MDG一样,您需要使用流式传输来避免将整个文件和加密文件保留在内存中。
Forge的密码对象(请参阅:AES)将允许您从流中消耗数据块。您可以cipher.update()
从流中加密任意大小的数据块,然后调用cipher.output.getBytes()
清除内部缓冲区并获取任何加密输出,然后您可以将其发送到某处。这应该会降低你的内存使用率。
请记住,从伪造缓冲区获得的字节将以字符串形式编码。字符串编码类型是node.js识别为' binary'的内容。 (对于不支持TypedArrays的浏览器,这是一种在JS字符串中编码字节的方法,许多浏览器在首次编写伪造时没有这样做)。如果您正在与node.js服务器通话,则可以使用'二进制文件将此字符串放入Buffer
。编码。如果您正在与另一台服务器通话,您可能希望在传输之前对它们进行base64编码。您可以使用forge.util.encode64
。
您可能还想查看OpenPGP.js。
答案 1 :(得分:0)
加密大文件应基于流,以降低内存使用率。您可以查看crypto模块中内置的节点,或者在npm(例如file-encryptor)上尝试不同的软件包