哪个更安全更快?uid4或crypto。randomBytes for session id
这是我现在如何生成会话id的:
app.use(session({
secret: 'some long secret',
genid: ()=>{
return crypto.randomBytes(32).toString('hex');
},
cookie: {
...
}
}));
但是我担心它会阻塞事件循环。哪个更好用?uid4或加密。randomBytes吗?性能、安全性和速度对我来说很重要。提前谢谢。
所以,uid4只使用crypto.randomBytes()
本身:
function uuid4() {
var rnd = crypto.randomBytes(16);
rnd[6] = (rnd[6] & 0x0f) | 0x40;
rnd[8] = (rnd[8] & 0x3f) | 0x80;
rnd = rnd.toString("hex").match(/(.{8})(.{4})(.{4})(.{4})(.{12})/);
rnd.shift();
return rnd.join("-");
}
但是,它只生成一个初始的16字节长值,然后修改它。如果您真的想知道两者的性能,就像所有与性能相关的问题一样,您将不得不对它们进行基准测试并进行比较,但是如果您将它们设置为相同的长度,那么您不太可能发现很大的差异。
都可以。由于使用了同步版本的crypto.randomBytes()
,两者都将对事件循环征收一小笔税,但在会话中正确使用时,这应该只在用户第一次到达您的站点时触发,而没有现有的会话cookie,因此它不会在每个请求上重复征税。
从会话可猜测性的角度来看,应该是足够安全的。当谈到安全性时,我倾向于使用广泛使用和广泛审查的库,而不是推出自己的解决方案,因为我认为那些比我更了解安全性的人一直在关注广泛使用的解决方案。
这是一篇关于uuid4()
的描述性文章,其中有一些关于极低碰撞可能性的评论。它还解释了您在uuid4()
代码中看到的位抖动的原因。