提问者:小点点

Codeigniter加密中可能的密钥长度是多少?


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


共2个答案

匿名用户

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

如果您使用的是system/库/Encrypt. php,那么您使用的是密钥大小为256位的Rijndael-256(默认值;不是AES,因为块大小(256)不同)。您传入的每个“密钥”都将用MD5散列,实际上只有128位大小,但它是十六进制编码的,因此不必要地膨胀到256位而没有额外的安全性。不用说,这是相当古老的,不应该再使用了。

如果您使用的是系统/库/加密. php,那么您使用的是带有身份验证的AES-128(这里128实际上是指密钥大小)。您传入的密钥用于加密和身份验证。加密密钥来自通过HKDF和HMAC-SHA512传递的密钥,因此它将被有效散列,然后钳制为128位。您仍然需要传递至少16字节的密钥才能具有128位的安全性。

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

使用128字节(1024位)密钥怎么样?

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

匿名用户

当你使用AES-256时。它有

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

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