这是我的第一个问题。英语不是我的第一语言。 我有一个包含大约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行/秒)。有没有办法加快这个过程?
答案 0 :(得分:1)
您使用的scrypt算法故意缓慢且资源密集,以防止对加密密码的暴力攻击(更多信息请访问:scrypt)。使其更快,例如减少轮数,会削弱加密的强度,因此你可以做的很少。
加速计算的一个可能的解决方案是使用算法的本机实现,node-scrypt例如是围绕原始C ++库的JS包装器,尝试它,你肯定会得到很大的改进,因为jscl是纯JavaScript。