读取一个长文件并使用nodejs来加密

时间:2014-09-09 10:01:07

标签: javascript node.js sjcl

这是我的第一个问题。英语不是我的第一语言。 我有一个包含大约800K行的文件。我必须使用sjcl库读取和加密它们。到目前为止,我唯一做的就是这一行:

var sjcl = require('sjcl/sjcl.js');
var fs = require('fs'),
    readline = require('readline'),
    stream = require('stream');
var instream = fs.createReadStream('data');
var outstream = new stream;
outstream.readable = true;
outstream.writable = true;

var rl = readline.createInterface({
    input: instream,
    output: outstream,
    terminal: false
});

rl.on('line', function(line) {
    var cred = line.toLowerCase()+line;
    var salt = sjcl.codec.utf8String.toBits(cred);
    var id = sjcl.misc.scrypt(cred,salt,2048,8,1,32);
    var ret = sjcl.codec.hex.fromBits(id);
    console.log(ret+":"+line);
    });

它有效,但速度非常慢(10行/秒)。有没有办法加快这个过程?

1 个答案:

答案 0 :(得分:1)

您使用的scrypt算法故意缓慢且资源密集,以防止对加密密码的暴力攻击(更多信息请访问:scrypt)。使其更快,例如减少轮数,会削弱加密的强度,因此你可以做的很少。

加速计算的一个可能的解决方案是使用算法的本机实现,node-scrypt例如是围绕原始C ++库的JS包装器,尝试它,你肯定会得到很大的改进,因为jscl是纯JavaScript。