【问题标题】:Why is AES function returning different value?为什么AES函数返回不同的值?
【发布时间】:2014-11-02 07:04:43
【问题描述】:

为什么具有相同秘密短语和消息的 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 提供不同的芯片。

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 模式很重要。在我的情况下,盐是恒定的,我已经切换到其他模式。每次输出仍然不同。

【问题讨论】:

    标签: javascript encryption aes pbkdf2


    【解决方案1】:

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

    【讨论】:

    • CBC、CFB、CTR、OFB、ECB。所有这些模式都应该返回不同的密码吗?
    • ECB 没有,但几乎总是使用错误的模式,因为它不提供语义安全性。如果明文消息中的块重复,则密文中的相应块将重复。 (将有关明文的信息泄露给任何看到的人)。见en.wikipedia.org/wiki/Block_cipher_mode_of_operation
    猜你喜欢
    • 2020-04-28
    • 1970-01-01
    • 2017-11-25
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 2021-05-04
    相关资源
    最近更新 更多