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

如何计算PHP Mcrypt Rijndael 256 CBC的输出长度,php,cakephp,mcrypt,rijndael,cbc-mode,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长度的原始字符串输入需要多少字段长度?瓦查尔(?) 如果您

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

以下是插件的加密代码:

return base64_encode(
     mcrypt_encrypt(
          MCRYPT_RIJNDAEL_256, md5($settings['key']
     ), $value, MCRYPT_MODE_CBC, md5(md5($settings['key']
))));
例如,2000长度的原始字符串输入需要多少字段长度?瓦查尔(?)

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


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

我做了一个这样的测试来找到答案:

$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 .'%';


与其使用固定的
varchar
,不如使用字段类型
text

使用CakePHP的Security::encrypt()方法,因为它使用的是现成的Rijndael-256。Rijndael密码的长度是可变的,取决于所使用的密钥,因此VarChar不起作用。密文是二进制数据,不需要对其进行编码,因此可以使用BLOB字段

当然是文字的类型!我不知道为什么我没有想到,非常感谢!
source str length = 2000
encrypted str length = 2688
diff = 34.4%


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