为什么具有相同密码短语和消息的AES每次都返回不同的值? 让我们说每个PBKDF2功能都有相同的盐(我知道它很糟糕,它仅仅是一个例子)。我们假设每次都输入相同的密码。
var salt = "5J07c/a7+2bf=15$56aQc75Ub55=60&0";
console.log(req.body.password);
console.log(salt);
var PBKDF2hash = crypto.PBKDF2(req.body.password, salt, { keySize: 256/32 });
console.log(PBKDF2hash.toString());
var AEScipher = crypto.AES.encrypt(req.body.password, PBKDF2hash);
console.log(AEScipher.toString());
在这种情况下,我们会收到相同的PBKDF2hash(如预期的那样),但只要AES提供不同的chipher。
zz
5J07c/a7+2bf=15$56aQc75Ub55=60&0
3949676666ed318087a52896be98dc80b0cad99f4b662d48565283f71a2ace80
U2FsdGVkX19O1pqgL+V6Chk8NdiJQhf15N1uEfYXgxw=
zz
5J07c/a7+2bf=15$56aQc75Ub55=60&0
3949676666ed318087a52896be98dc80b0cad99f4b662d48565283f71a2ace80
U2FsdGVkX1/C7GAmLJvfFAHyOYj7LKZI5278/ZoeA3M=
These答案说,盐是不同的,cbc模式很重要。在我的情况下,盐是恒定的,我已切换到其他模式。每次输出仍然不同。
答案 0 :(得分:2)
CBC模式中使用的initialization vector是一个随机块,因此每次加密都会有所不同。 IV有点像盐,除非加密消息时没有理由指定任何特定的IV使用(应始终使用随机IV)。 IV通常放在加密消息的第一个块之前。