我需要在NodeJS中散列哈希值(H(H(H(...))大约100到000次我已经提出了三个解决方案,但它们每个都有问题。
任何人都可以提出一个不慢,崩溃或阻塞的解决方案吗? - 最好不要说线程,但我对此持开放态度。
注意:这更像是一个javascript / NodeJS问题,然后是一个加密的
第一个是最快的,但阻止了232毫秒,所以没有好处。
hash = function(data, n)
{
return new Promise((resolve,reject) => {
if(data === undefined || n < 1) resolve(false);
while(n--)
{
//console.log('iteration', n, data)
let hash = crypto.createHash('sha256');
hash.update(data);
data = hash.digest();
}
resolve(data)
}).catch(err=>{return err})
}
下一个包含两个解决方案(2&amp; 3),唯一的区别是单行代码。一个溢出堆栈,另一个非常慢,如评论。
hash = function(data, n)
{
return new Promise((resolve,reject) => {
if(data === undefined || n < 1) resolve(false);
(function it() {
//console.log('iteration', n, data)
let hash = crypto.createHash('sha256');
hash.on('readable', () => {
let t = hash.read();
if(t == null) return;
data = t;
hash.read();
if(--n > 0) {
//2. gets me to n=100000 but n=10000 takes 15 seconds!!!
setTimeout(it, 0)
//3. Very fast but Maximum call stack size exceeded when
// n=641 so no good and I'm not going to increase the
// limit just to force it.
//it();
} else {
resolve(data);
}
});
hash.write(data);
hash.end();
})();
}).catch(err=>{return err})
}