Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Forge:加密大文件_Javascript_Node.js_Cryptography_Forge - Fatal编程技术网

Javascript Forge:加密大文件

Javascript Forge:加密大文件,javascript,node.js,cryptography,forge,Javascript,Node.js,Cryptography,Forge,我用于某种PGP实现。所以我需要加密非常大的文件(2gb或更多)并保持加密。我想使用尽可能小的RAM内存 最好的方法是什么?加密大文件应该基于流,以降低内存使用率,您可以查看节点的内置模块,或者在npm上尝试不同的包(例如)这是一个一般的设计问题——与forge没有太大关系。如前所述,您需要使用流式传输,以避免将整个文件和加密文件保存在内存中 Forge的cipher对象(请参阅:)将允许您使用流中的数据块。您可以执行cipher.update()对流中任意大小的数据块进行加密,然后调用ciph

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


最好的方法是什么?

加密大文件应该基于流,以降低内存使用率,您可以查看节点的内置模块,或者在npm上尝试不同的包(例如)

这是一个一般的设计问题——与forge没有太大关系。如前所述,您需要使用流式传输,以避免将整个文件和加密文件保存在内存中

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

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

您可能还想退房