为什么Laravel4.2加密密钥少于CodeIgniter中的加密密钥字符?

时间:2014-10-11 04:29:24

标签: php codeigniter security encryption laravel-4

我目前正在学习Laravel4.2并开始与Codeigniter进行比较 但我在加密密钥字符上发现了一些问题,如下面的代码所示 我已经使用此密钥在Laravel 4.2中进行测试,但由于我收到了消息,因此无法正常工作 " mcrypt_encrypt():此算法的密钥大小太大"

但是当我在 Codeigniter 最新版本中使用相同的加密密钥时,它的工作非常完美。

我的问题:如果我使用加密密钥 的MCRYPT_RIJNDAEL_256,Larave 4.2如何安全?

  • '键' => ' SdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdR lCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrd',
  • '密码' => MCRYPT_RIJNDAEL_256,

1 个答案:

答案 0 :(得分:1)

AES密钥需要与随机区分开来,长度为16,24或32字节。似乎Laravel增加了对AES密钥的额外检查,使其成为有效大小。

基本上PHP的mcrypt所做的事情(不确定C代码)是,如果密钥小于32字节,它会以00值字节扩展密钥数据,直到它达到第一个合法的AES密钥大小。如果密钥大于32字节,它只需将其切割为32字节。这绝对违反了处理密钥的任何良好做法。

因此,您的AES密钥可能只被解释为'SdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrd',编码为ASCII。密钥的肯定不能提供AES-256的完全安全性,因为密钥会显着减少密钥空间(如果使用62个字符的字母表,则略多于8个字节,假设每个值都在字母表同样可能。)

请注意,MCRYPT_RIJNDAEL_256 不是 AES,因此您只能使用支持Rijndael且块大小为256的库对其进行解密。