是否可以在 SJCL 中使用 bcrypt 或 scrypt 作为 PBKDF2 的替代品?

Is it possible to use bcrypt or scrypt as an alternative to PBKDF2 in SJCL?

我一直在使用这个库,我真的很喜欢它,但据我所知,PBKDF2 比 bcrypt 或 scrypt 更容易受到暴力攻击。我遇到了这个关于 adding scrypt support 的问题,但似乎没有明确的答案。

理想情况下,我想简单地替换 PBKDF2 功能,但我对 SJCL 的内部工作原理还不够熟悉,不知道这是否可行。

如果可能的话,我想您可以很容易地使用类似这样的 pure JS bcrypt 实现。

是的,这是可能的,但需要更多的手动工作。 首先你需要用scrypt编译sjcl:

./configure --with-scrypt
make

那你就得用scrypt来生成密钥对了:

var salt = sjcl.random.randomWords(2,0);
var key = sjcl.misc.scrypt(password, salt);
var encrypted = sjcl.json.encrypt(key, original);
var decrypted = sjcl.json.decrypt(key, encrypted);