如何解决使用带有 pbkdf2 加密的 aes 256 加密数据时定义迭代
嗨,我正在使用 firebase 和 vanilla javascript 创建密码管理器应用程序,并使用带有 sha512 本地存储密钥的 pbkdf2 加密的 aes 256 位。
这是我使用的代码 -
var keySize = 384;
var ivSize = 256;
var iterations = 1001;
function encrypt(msg,pass) {
var salt = CryptoJS.lib.WordArray.random(128 / 8);
var key = CryptoJS.PBKDF2(pass,salt,{
keySize: keySize / 32,iterations: iterations
});
var iv = CryptoJS.lib.WordArray.random(128 / 8);
var encrypted = CryptoJS.AES.encrypt(msg,key,{
iv: iv,padding: CryptoJS.pad.Pkcs7,mode: CryptoJS.mode.CBC
});
// salt,iv will be hex 32 in length
// append them to the ciphertext for use in decryption
var transitmessage = salt.toString() + iv.toString() + encrypted.toString();
var encodeB4 = CryptoJS.enc.Base64.stringify(transitmessage);
return encodeB4;
}
function decrypt(transitmessage,pass) {
var decoded =
const decoded = CryptoJS.enc.Utf8.stringify(transitmessage);
var salt = CryptoJS.enc.Hex.parse(decoded.substr(0,32));
var iv = CryptoJS.enc.Hex.parse(decoded.substr(32,32))
var encrypted = decoded.substring(64);
var key = CryptoJS.PBKDF2(pass,iterations: iterations
});
var decrypted = CryptoJS.AES.decrypt(encrypted,mode: CryptoJS.mode.CBC
})
return decrypted;
}
然而,现在当我解密加密数据时,站点挂起,如果有大约 10-20 个密码,站点就会无响应,后来我发现迭代是一个问题,因为加密和解密需要很多时间数据,但是当我查找像这样的其他服务时,例如.bitwarden 他们使用了大约 100k 次迭代,另一方面我在客户端加密/解密过程中只使用了 1k 次,所以它们如何如此快速和高效。同样使用cryptoJS或任何其他可以在vanilla javascript中使用的库,如果可以的话,任何人都可以共享代码片段、codepen或任何东西。
提前致谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。