如何计算PHP Mcrypt Rijndael 256 CBC的输出长度

时间:2014-05-19 14:23:40

标签: php cakephp mcrypt rijndael cbc-mode

我想使用cakephp的插件将加密数据存储在数据库中。但我想计算数据库字段需要多长的时间。

以下是插件的加密代码:

return base64_encode(
     mcrypt_encrypt(
          MCRYPT_RIJNDAEL_256, md5($settings['key']
     ), $value, MCRYPT_MODE_CBC, md5(md5($settings['key']
))));

例如2000加长原始字符串输入需要多长的字段长度? VARCHAR(?)

如果您需要更多详细信息,请访问 所有插件代码:

https://github.com/jmillerdesign/Cipher-Behavior-for-CakePHP/blob/master/Model/Behavior/CipherBehavior.php

2 个答案:

答案 0 :(得分:1)

我认为估计的答案是,源字符串长度+ 35%(来源str长度)。

我做了这样的测试以找到答案:

$key = 'really long key hello world';

// Source String
$str = '';
for ($i = 1; $i <= 2000; $i++) {
    $str .=  'x';
}
$slength = strlen($str);
echo 'source str length = '. $slength."<br>";
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $str, MCRYPT_MODE_ECB));

$elength = strlen($encrypted);
echo 'encrypted str length = '. $elength."<br>";

echo 'diff = '. (($elength - $slength)/$slength) * 100 .'%';

输出:

source str length = 2000
encrypted str length = 2688
diff = 34.4%


source str length = 20000
encrypted str length = 26668
diff = 33.34%

为什么不使用字段类型varchar而不是使用固定的text

答案 1 :(得分:0)

使用CakePHP的Security :: encrypt()方法,因为它使用Rijndael-256开箱即用。根据使用的密钥,Rijndael密码是可变长度的,因此VarChar不起作用。密文是二进制数据,不需要对其进行编码,因此您将使用BLOB字段。