加密文件流并通过管道传输到 http 响应
Encrypt file stream and pipe to http response
我想加密文件并将其作为即时的 http 响应。
我目前的工作流程是这样的。
const fs = require('fs');
const server = require('http').createServer();
server.on('request', (req, res) => {
const src = fs.createReadStream('./big.file');
src.pipe(res);
});
server.listen(8000);
我想在将流传输到响应之前对其进行加密。我知道我必须使用转换流,但我确定正确的实现方式。
这在 Node.js 中得到了很好的支持,加密文档中有一个关于这个主题的部分非常有用:https://nodejs.org/dist/latest-v14.x/docs/api/crypto.html(示例:使用密码和管道流):
const cipher = crypto.createCipheriv(algorithm, key, iv);
const input = fs.createReadStream('test.js');
const output = fs.createWriteStream('test.enc');
input.pipe(cipher).pipe(output);
上面的示例将文件读取流通过管道传输到文件写入流,这与通过管道传输到 http 响应一样容易,如下所示:
const crypto = require("crypto");
const fs = require("fs");
// Using 256-bit AES here
const algorithm = "aes-256-cbc";
const key = Buffer.from("22975a65b34aefb6227084727f27bfae234d1be463d1e2f2cc611820e5aa5772", "hex");
const iv = Buffer.from("979843777c873b5a2060c2ad968a20d9", "hex");
const server = require('http').createServer();
server.on('request', (req, res) => {
const cipher = crypto.createCipheriv(algorithm, key, iv);
const src = fs.createReadStream('./big.file');
src.pipe(cipher).pipe(res);
});
server.listen(8000);
我想加密文件并将其作为即时的 http 响应。
我目前的工作流程是这样的。
const fs = require('fs');
const server = require('http').createServer();
server.on('request', (req, res) => {
const src = fs.createReadStream('./big.file');
src.pipe(res);
});
server.listen(8000);
我想在将流传输到响应之前对其进行加密。我知道我必须使用转换流,但我确定正确的实现方式。
这在 Node.js 中得到了很好的支持,加密文档中有一个关于这个主题的部分非常有用:https://nodejs.org/dist/latest-v14.x/docs/api/crypto.html(示例:使用密码和管道流):
const cipher = crypto.createCipheriv(algorithm, key, iv);
const input = fs.createReadStream('test.js');
const output = fs.createWriteStream('test.enc');
input.pipe(cipher).pipe(output);
上面的示例将文件读取流通过管道传输到文件写入流,这与通过管道传输到 http 响应一样容易,如下所示:
const crypto = require("crypto");
const fs = require("fs");
// Using 256-bit AES here
const algorithm = "aes-256-cbc";
const key = Buffer.from("22975a65b34aefb6227084727f27bfae234d1be463d1e2f2cc611820e5aa5772", "hex");
const iv = Buffer.from("979843777c873b5a2060c2ad968a20d9", "hex");
const server = require('http').createServer();
server.on('request', (req, res) => {
const cipher = crypto.createCipheriv(algorithm, key, iv);
const src = fs.createReadStream('./big.file');
src.pipe(cipher).pipe(res);
});
server.listen(8000);