我对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位吗?
答案 0 :(得分:1)
由于crypto-js中的API错误,您的混淆是100%。
在现实世界中,加密是通过密钥完成的,而不是密码。如果只有一个密码,那么他们应该使用基于密码的密钥派生函数将其转换为密钥,例如pbkdf2,scrypt,bcrypt或argon2。
在crypto-js中,可以使用密钥或密码(两种不同的API调用)进行加密。 crypto-is中的密码基加密是非标准的,并使用不安全的基于密码的密钥派生函数。
Upshot:不要使用基于crypto-js密码的加密API。相反,使用带有密钥和IV的API,其中密钥是128位,192位或256位。
参考文献: