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

时间:2017-09-28 05:07:46

标签: node.js cryptography aes cryptojs

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

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

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

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

是通过哈希运行的myPassword变量来创建128,192或256位密钥?为了最好的安全性,我们应该已经myPassword 256位吗?

1 个答案:

答案 0 :(得分:1)

由于crypto-js中的API错误,您的混淆是100%。

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

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

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

参考文献: