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

问题描述:

我目前正在研究Laravel4.2并开始与笨 相比,但我发现下面的代码 上加密密钥性格有些问题,我用这个键来测试在Laravel 4.2,但它不工作,因为我得到的消息 “mcrypt_encrypt():关键的尺寸对于这种算法太大”为什么Laravel4.2加密密钥少于CodeIgniter中的加密密钥字符?

但它的时候,我用了相同的加密密钥最新版本的工作完美。

我的问题:如何Larave 4.2安全的,如果我用MCRYPT_RIJNDAEL_256 加密的主要

  • '关键'=> “SdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZK N5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQk rdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrd”,
  • '密码'=> MCRYPT_RIJNDAEL_256,
+0

你知道你的钥匙只有50个字符重复30次吗?你为什么这么做?会更好地完全随机 – Laurence 2014-10-11 10:16:14

+0

换班, 我不想这样做,我也不明白,我应该如何选择类型的加密密钥为Laravel 4.2,为什么我问所有的专家,现在请你能推荐我使用它吗? **我应该使用哪一个字符来进行我的加密?** – hengsopheak 2014-10-12 06:27:24

AES密钥需要是从在长度的随机和是16,24或32个字节没有区别。看来Laravel为AES密钥添加了一个额外的检查是一个有效的大小。

基本上,PHP的mcrypt所做的(不确定C代码)是,如果密钥小于32字节,它将扩展带有00值的字节的密钥数据,直到达到第一个合法的AES密钥大小。如果密钥大于32个字节,则将其简化为32个字节。这完全违反了处理密钥方面的任何良好做法。

所以你的AES密钥可能只是被解释为编码为ASCII的'SdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrd'。密钥的这种当然不能提供AES-256的全部安全性,因为密钥明显减少密钥空间(如果使用62个字符的字母表,假设字母表中的每个值具有相同的可能性,则略大于8个字节) 。

并注意MCRYPT_RIJNDAEL_256 AES,所以你将只能与支持Rijndael算法与块大小的256库解密。

+0

Owlstead, 因此,我必须起诉** SdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrd **而且它可能安全或可能用于加密吗? – hengsopheak 2014-10-12 06:59:55

+0

好吧,显然* *特定的密钥已经不再安全了,现在你已经在这里发布了它。如果密钥是由随机数生成器生成的,但它仍然具有足够的AES-128强度(这非常安全),但我不会再使用AES-256。如果你想拥有一个安全密钥,用一个随机数生成器生成它,如果你需要一个字符串*,用十六进制数来存储密钥值。 – 2014-10-12 16:24:09