据我了解,IV 仅用作第一个块的前一个块。但是由于每个块都被以下使用,这增加了重要的安全性,因为提供了 IV 而不是基于密码。
因此,当用户同时提供两者时,我实现了一个登录系统,至少 8 个字符使用他们关心的任何字符,只要他们使用至少 3 种类型(大写、小写、数字、特殊、非 ASCII)。
但是现在有人告诉我,通过定义 IV,我削弱了加密,因为这会使密码变得毫无用处。
我没有完全理解他的解释。
我的代码如下所示:
$hash = openssl_encrypt($username, 'aes-256-cbc', $password, false, md5($iv, true));
- 是的,我正在加密用户名
- 密码和 IV 都是用户定义的
- 是的,我要求他们提供两个密码
- 我将 IV 包装在 RAW md5 中,以确保获得标准的 16 chr 长度
有人可以澄清以这种方式使用 IV 是否是一种好的做法,并且这个想法是否足够强大。