我目前正在学习Laravel4.2并开始与Codeigniter进行比较 但我在加密密钥字符上发现了一些问题,如下面的代码所示 我已经使用此密钥在Laravel 4.2中进行测试,但由于我收到了消息,因此无法正常工作 " mcrypt_encrypt():此算法的密钥大小太大"
但是当我在 Codeigniter 最新版本中使用相同的加密密钥时,它的工作非常完美。
我的问题:如果我使用加密密钥 的MCRYPT_RIJNDAEL_256,Larave 4.2如何安全?
答案 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的库对其进行解密。