如何使用 cryptoJS 或节点的默认加密为 AES 选择密码?

How to pick a password for AES using cryptoJS, or node's default crypto?

我对 AES 的初始设置不太了解,但我了解算法本身在我们开始第 2-14 轮(subBytes、shiftRows、mixColumns、addRounKey)后如何工作,具体取决于密钥的大小。

我没有遵循的是初始密码和设置。我们是选择任意长度的密码,还是创建自己的 128、192 或 256 位密码,然后在整个应用程序中使用?

例如,在这个使用 AES 和 cryptojs 的例子中:

var myString   = "attack at dawn";
var myPassword = "superSecretPassword";
var encrypted = CryptoJS.AES.encrypt(myString, myPassword);

myPassword变量运行通过哈希创建128、192或256位密钥?为了获得最佳安全性,我们是否应该已经将 myPassword 设置为 256 位?

你的困惑是 100% 由于 crypto-js 中的错误 API。

在现实世界中,加密是通过密钥而不是密码完成的。如果只有密码,那么他们应该使用基于密码的密钥派生函数将其转换为密钥,例如 pbkdf2、scrypt、bcrypt 或 argon2。

在 crypto-js 中,可以使用密钥或密码(两种不同的 API 调用)进行加密。 crypto-is 中的基于密码的加密是非标准的,并且使用了不安全的基于密码的密钥派生函数。

结果:不要使用基于密码的 crypto-js 加密 API。相反,使用带有密钥和 IV 的 API,其中密钥是 128 位、192 位或 256 位。

参考文献: