1

我目前在安卓应用程序上使用 AES-ECB 加密用户密码,但我必须将此应用程序的数据库连接到一个网站,用户可以在该网站上以与移动应用程序相同的方式注册和登录。

我读过 ECB 模式不安全,所以我想通过生成 IV 来使用 CBC。

将IV作为常量存储在代码中是否安全(我也以这种方式存储密钥),无论是在服务器端的php中还是在应用程序中?

如果没有,网站和移动应用程序有没有办法共享它的 IV 来加密/解密用户密码?

或者,我可能选择了错误的加密算法,可能有一个更适合我的需要

4

2 回答 2

4

Best practice would be to create a new random IV for each encryption. The IV is basically a seed for that encryption call used in the first block.

Each IV can be safely stored in clear text along with the cypher text so it is available when decrypting the cypher text (the IV used to encrypt must be the same IV used to decrypt).

于 2012-12-11T11:28:25.047 回答
1

如果你对这个算法很满意,我可能会建议 -不要从加密端到解密端共享 IV。

虚拟 块 在 16 字节的实际消息块之前添加一个 16 字节的初始虚拟块。这样,即使您不将 IV 共享给解密端,由于 AES-CBC 是一种链接模式,解密端的第一个块(虚拟块)将被破坏,其余块不受影响。

加密结束 按照 AES 中的 CBC 模式,在 CBC 模式下,每个明文块在加密之前都与前一个密文块进行异或。为了使每条消息唯一,必须在第一个块中使用初始化向量。参考:http ://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Block_Chaining_.28CBC.29

解密结束 使用不正确的 IV 解密会导致第一个明文块损坏,但随后的明文块将是正确的。这是因为一个明文块可以从两个相邻的密文块中恢复。

于 2015-04-27T12:33:22.280 回答