【发布时间】:2014-04-25 21:17:04
【问题描述】:
我使用forge framework 来实现某种PGP。所以我需要加密非常大的文件(2gb 或更多)并保持加密。我想使用尽可能小的 RAM 内存。
最好的方法是什么?
【问题讨论】:
标签: javascript node.js cryptography forge
我使用forge framework 来实现某种PGP。所以我需要加密非常大的文件(2gb 或更多)并保持加密。我想使用尽可能小的 RAM 内存。
最好的方法是什么?
【问题讨论】:
标签: javascript node.js cryptography forge
这是一个普遍的设计问题——与锻造没有太大关系。正如MDG 所说,您需要使用流式传输来避免将整个文件和加密文件保存在内存中。
Forge 的密码对象(参见:AES)将允许您使用流中的数据块。您可以使用cipher.update() 从流中加密任意大小的数据块,然后调用cipher.output.getBytes() 清除内部缓冲区并获取任何加密输出,然后您可以将其发送到某处。这应该会降低您的内存使用率。
请记住,您从伪造缓冲区获取的字节将被编码为字符串。字符串编码类型是 node.js 识别为“二进制”的类型。 (对于不支持 TypedArrays 的浏览器,这是一种在 JS 字符串中编码字节的方法,许多浏览器在首次编写 forge 时不支持)。如果您正在与 node.js 服务器通信,则可以使用“二进制”编码将此字符串放入 Buffer 中。如果您正在与另一台服务器通信,您可能希望在传输之前对它们进行 base64 编码。您可以使用forge.util.encode64 执行此操作。
您可能还想查看OpenPGP.js。
【讨论】:
加密大文件应该是基于流的,以减少内存使用,您可以查看 node 内置的crypto 模块或在 npm 上尝试不同的包(例如file-encryptor)
【讨论】: