javascript - aes.js 和 crypto.js 最佳使用

标签 javascript cryptography aes pbkdf2

快速入门指南告诉我们可以使用aes.js这样:

var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase"); 
var decrypt = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase");

但是它足够安全吗?加密的是一个包含大量信息的数组(key、iv、salt、密文)。 但是使用 PBKDF2 来导出密码不是更安全吗?像这样:

var salt = CryptoJS.lib.WordArray.random(128/8); 
var key512Bits1000Iterations = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 512/32, iterations: 1000 });
var iv  = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f'); 

encrypted = CryptoJS.AES.encrypt("Message", key512Bits1000Iterations, { iv: iv });  
var decrypt = CryptoJS.AES.decrypt(encrypted, key512Bits1000Iterations, { iv: iv });

谢谢!

最佳答案

如果你看aes.js页面底部你指着你会发现:

与 OpenSSL 的互操作性

使用 OpenSSL 加密:

openssl enc -aes-256-cbc -in infile -out outfile -pass pass:"Secret Passphrase" -e -base64

使用 CryptoJS 解密:

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script>
    var decrypted = CryptoJS.AES.decrypt(openSSLEncrypted, "Secret Passphrase");
</script>

因此,如果您使用密码短语,aes.js 将使用 OpenSSL 兼容的 key 派生。

<小时/>

现在,如果您查看 OpenSSL 执行的 key 派生机制,EVP_BytesToKey ,你会发现这样的注释:

较新的应用程序应使用更多标准算法,例如 PKCS#5v2.1 中定义的 PBKDF2 来进行 key 派生。

关于javascript - aes.js 和 crypto.js 最佳使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17866121/

相关文章:

vb.net - NIST p256 点解压 : Finding Y-Coordinate For Base Point

java - 尝试解密 RSA 时出错

bash - openssl AES 加密为输出添加了一个 block 大小的字节

使用 C openssl AES-GCM 加密创建 ESP 数据包会引发错误的 ICV

javascript - 成功响应后通过 ajax 将值传递到第二个 jsp 页面

javascript - onClick 事件调用原型(prototype)方法, 'this' 有问题

javascript - Parsley 在初始验证调用后阻止 keydown 验证

encryption - 能够分解大量数字如何决定流行加密算法的安全性?

javascript - 如何在javascript中解密由JAVA使用AES加密的文件

javascript - 如何在完整日历中创建可滴色?