我有使用utf8_general_ci编码的mySQL数据库。我的桌子是Innodb
CodeIgniter(3.x(用作构建PHP应用程序的框架。我的计划是使用CodeIgniter(3.x(加密类加密一些数据为了增强安全性。
我使用AES-256,加密密钥的长度为32个字节(字符(
将加密的大多数列当前为Varchar类型(255(。我正在考虑增加这个价值,但我不知道多少。
这确实取决于您打算使用的操作方式。AES是一个块密码,块大小为128位。也就是说,128位明文产生了128位密文。
但是...
诸如欧洲央行和CBC 的操作模式需要,输入数据是块大小的倍数。因此,例如,如果您只想加密112位明文,则首先必须将您的明文填充以成为块的倍数(例如,我们添加了2个字节的填充物(。这通常是通过AES实施自动完成的,但这确实意味着您的授权的长度(加密时(最多可以增加16个字节。
诸如CTR和CFB之类的操作模式将块密码转换为流密码。流密码不需要填充,因此将112位纯文本加密到112位密文。
您还需要考虑需要预先置入IV/Nonce的需要。通常,这是16个字节值,但是GCM和CTR模式可能会有所不同。我相信默认值是12个字节,但我可能会误会。
牢记上述内容,并假设您希望加密的任何数据小于或等于您的原始255字节限制,您将需要:
-
对于欧洲央行,将极限增加到256个字节(16个字节的完美倍数(。
-
对于CBC,将极限增加到256 16字节(对于IV(。
-
对于将AES变成流密码(CTR,CFB等(的模式,数据量可以相同(255个字节(,但是您需要为您的nonce腾出空间,我认为这是通常12个字节。您需要确认。