我正在尝试使用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来测试。
答案 0 :(得分:0)
采用更简单的概念:
您的fstream
是一个流阅读器,它会按固定大小的小块读取您的文件,而您的hash
将在文件的小块上构建sha512哈希字符串。你的程序不会将整个文件保存在ram中,它会读取它的小块,生成散列摘要,从ram中逐出它们并读取下一个数据块。
如果要对此进行测试,请生成10GB文件fallocate -l 10G 10gbtest.img
并针对此文件运行脚本。