【问题标题】:Encrypt file stream and pipe to http response加密文件流和管道到 http 响应
【发布时间】:2021-01-20 16:28:25
【问题描述】:

我想加密一个文件并将其作为 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 node-streams


    【解决方案1】:

    这在 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);
    

    【讨论】:

      猜你喜欢
      • 2021-06-24
      • 2014-09-21
      • 1970-01-01
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 2017-05-26
      • 1970-01-01
      相关资源
      最近更新 更多