在NodeJS中隐藏比RAM更大的文件

时间:2015-10-11 18:38:17

标签: node.js hash

我正在尝试使用nodejs中的crypto来散列文件。 这就是我所做的。

// generate a hash from file stream
    var crypto = require('crypto'),
        fs = require('fs'),
        key = 'hehe';

    // open file stream
    var fstream = fs.createReadStream('path/to/file');
    var hash = crypto.createHash('sha512', key);
    hash.setEncoding('hex');

    // once the stream is done, we read the values
    fstream.on('end', function() {
        hash.end();
        // print result
        console.log(hash.read());
    });

    // pipe file to hash generator
    fstream.pipe(hash);

一切都运作良好,但我想知道如果我想要哈希的文件比我的RAM更大会是什么?

理论上现在,如果文件比RAM大,程序应该崩溃。 我目前的RAM是10GB,我没有一个更大的文件,然后10gb来测试。

1 个答案:

答案 0 :(得分:0)

采用更简单的概念:

您的fstream是一个流阅读器,它会按固定大小的小块读取您的文件,而您的hash将在文件的小块上构建sha512哈希字符串。你的程序不会将整个文件保存在ram中,它会读取它的小块,生成散列摘要,从ram中逐出它们并读取下一个数据块。

如果要对此进行测试,请生成10GB文件fallocate -l 10G 10gbtest.img并针对此文件运行脚本。