我们如何在节点 http 代理中使用 AES 加密文件?
How do we encrypt a file with AES in node http proxy?
我使用 http-proxy
包在 nodejs 中创建了一个 http 代理。我想通过这个代理做的是听取代理的请求,加密文件内容并将其转发到相应的服务。所以我正在使用 proxyReq 事件来侦听来自代理的请求。并尝试加密请求中的文件。
const { createEncryptStream, setPassword } = require('aes-encrypt-stream');
const PassThroughStream = require('stream').PassThrough;
proxy.on('proxyReq', (proxyReq, pReq, pRes) => {
setPassword(Buffer.from(pReq.encryptionKey, 'hex'));
const stream = new PassThroughStream();
createEncryptStream(pReq).pipe(stream);
});
我不太擅长流,但我如何加密请求中的文件并转发它?我尝试了各种解决方案,将 multipart/form-data 的文件内容分块并转发它,但广泛使用内存。所以我正在寻找一种可以在流中加密的解决方案。
就内存使用而言,您在此处显示的代码存在的问题是流将缓冲所有传入数据。
假设targetRequestStream
是上游请求,targetResponseStream
是上游响应。这将确保数据在读取时被加密并发送到目标服务器。响应在收到时被解密并发送给客户端。
const { createEncryptStream, setPassword } = require('aes-encrypt-stream');
proxy.on('proxyReq', (proxyReq, pReq, pRes) => {
setPassword(Buffer.from(pReq.encryptionKey, 'hex'));
createEncryptStream(pReq).pipe(targetRequestStream);
createDecryptStream(targetResponseStream).pipe(pRes)
});
防止所有数据缓冲的其他方法是添加一个 data
事件侦听器。
const { createEncryptStream, setPassword } = require('aes-encrypt-stream');
proxy.on('proxyReq', (proxyReq, pReq, pRes) => {
setPassword(Buffer.from(pReq.encryptionKey, 'hex'));
createEncryptStream(pReq)
.on('data', (data) => { /*handle encrypted data here */});
createDecryptStream(targetResponseStream)
.on('data', (data) => { /* handle decrypted data here */ });
});
我使用 http-proxy
包在 nodejs 中创建了一个 http 代理。我想通过这个代理做的是听取代理的请求,加密文件内容并将其转发到相应的服务。所以我正在使用 proxyReq 事件来侦听来自代理的请求。并尝试加密请求中的文件。
const { createEncryptStream, setPassword } = require('aes-encrypt-stream');
const PassThroughStream = require('stream').PassThrough;
proxy.on('proxyReq', (proxyReq, pReq, pRes) => {
setPassword(Buffer.from(pReq.encryptionKey, 'hex'));
const stream = new PassThroughStream();
createEncryptStream(pReq).pipe(stream);
});
我不太擅长流,但我如何加密请求中的文件并转发它?我尝试了各种解决方案,将 multipart/form-data 的文件内容分块并转发它,但广泛使用内存。所以我正在寻找一种可以在流中加密的解决方案。
就内存使用而言,您在此处显示的代码存在的问题是流将缓冲所有传入数据。
假设targetRequestStream
是上游请求,targetResponseStream
是上游响应。这将确保数据在读取时被加密并发送到目标服务器。响应在收到时被解密并发送给客户端。
const { createEncryptStream, setPassword } = require('aes-encrypt-stream');
proxy.on('proxyReq', (proxyReq, pReq, pRes) => {
setPassword(Buffer.from(pReq.encryptionKey, 'hex'));
createEncryptStream(pReq).pipe(targetRequestStream);
createDecryptStream(targetResponseStream).pipe(pRes)
});
防止所有数据缓冲的其他方法是添加一个 data
事件侦听器。
const { createEncryptStream, setPassword } = require('aes-encrypt-stream');
proxy.on('proxyReq', (proxyReq, pReq, pRes) => {
setPassword(Buffer.from(pReq.encryptionKey, 'hex'));
createEncryptStream(pReq)
.on('data', (data) => { /*handle encrypted data here */});
createDecryptStream(targetResponseStream)
.on('data', (data) => { /* handle decrypted data here */ });
});