1

我想使用 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

4

2 回答 2

1

我认为估计的答案是,源字符串长度+ 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 .'%';

输出:

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


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

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

于 2014-05-19T14:40:02.967 回答
0

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

于 2014-05-21T22:54:40.270 回答