为什么AES函数返回不同的值?

时间:2014-09-08 23:53:23

标签: javascript encryption aes pbkdf2

为什么具有相同密码短语和消息的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模式很重要。在我的情况下,盐是恒定的,我已切换到其他模式。每次输出仍然不同。

1 个答案:

答案 0 :(得分:2)

CBC模式中使用的initialization vector是一个随机块,因此每次加密都会有所不同。 IV有点像盐,除非加密消息时没有理由指定任何特定的IV使用(应始终使用随机IV)。 IV通常放在加密消息的第一个块之前。