Codeigniter 加密的密钥长度是多少?

Which key length is possible in Codeigniter encryption?

我正在使用 CI 自己的加密,需要确认 AES-256 与 CBC 使用的密钥长度。我同时使用 32 字节和 64 字节,一切正常。 使用 128 字节(1024 位)密钥怎么样?

当您使用 A​​ES-256 时。它有

Minimum of Strength - 256
Factoring Modulus - 15360
Hash (A) - SHA-512
Hash (B) - SHA-256/SHA-384/SHA-512

同时阅读这篇文章http://www.keylength.com

AES 具有 128 位的固定块大小,支持 128、192 和 256 位的密钥大小。它不支持 512 位(64 字节)的密钥大小。 AES 基于的 Rijndael 支持 128、192 和 256 位的块大小,密钥大小与 AES 相同。

如果您使用的是 system/libraries/Encrypt.php,那么您使用的是 Rijndael-256(默认;不是 AES,因为块大小 (256) 不同)密钥大小为 256 位。您传入的每个 "key" 都将使用 MD5 进行哈希处理,MD5 实际上只有 128 位大小,但它是十六进制编码的,因此在没有额外安全性的情况下不必要地膨胀到 256 位。不用说,这已经很旧了,不应该再使用了

如果您使用 system/libraries/Encryption.php,那么您使用的是 AES-128(此处 128 实际上表示密钥大小)和身份验证。您传入的密钥用于加密和身份验证。加密密钥是从通过 HKDF 使用 HMAC-SHA512 传递的密钥导出的,因此它将被有效地散列,然后钳位到 128 位。您应该仍然需要传递至少 16 字节的密钥以获得 128 位安全性。

尽管在这两种情况下都对密钥进行了散列以获得适当的大小(实际上更大,但底层驱动程序只占用了他们需要的第一个字节),但不要尝试传递密码,因为它们有很多熵比至少 16 字节的真正随机生成的密钥少。

How about using a 128 Bytes (1024 bits) key?

这不会给您更多的安全性,因为从您传递的密钥派生的实际加密密钥实际上只有 256 位长。